0

我正在检查多维数组中子数组中的某些元素是否不等于某个值,并使用多维数组中的该值取消设置数组。我构建了一个函数,以便我可以轻松地实现它,但是它似乎不起作用。

function multi_unset($array, $unset) {
    foreach($array as $key=>$value) {
        $arrayU = $array[$key];
        $check = array();
        for($i = 0; $i < count($unset); $i++) { // produces $array[$key][0, 2, 3]
            array_push($check, $arrayU[$unset[$i]]);
        }
        if(in_array("-", $check)) {
            unset($array[$key]);
        }
    }
    return $array;
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3); // keys in individual arrays to check
multi_unset($arr, $unset);
print_r($arr); // Should output without $arr[0]

在这种情况下,我正在检查每个子数组中是否有一个“-”值,并从多数组中取消设置数组。我只检查子数组 (0, 2, 3) 中的特定键,但是它输出一个数组而没有任何更改。我想我一定有一些范围错误,并试图在任何可能的地方使用“全局”,但这似乎并没有解决它。

4

2 回答 2

0

您可能想阅读一下通过引用传递与 PHP 中的值传递。这是一些适用于给定数据集的代码....

// Note the pass by reference.
function multi_unset(&$array, $unset) {
    foreach($array as $pos => $subArray) {
        foreach($unset as $index) {
            $found = ("-" == $subArray[$index]);
            if($found){
                unset($subArray[$index]);
                            // Ver 2: remove sub array from main array; comment out previous line, and uncomment next line.
                            // unset($array[$pos]);
            }
            $array[$pos] = $subArray;  // Ver 2: Comment this line out
        }
    }
    //return $array; // No need to return since the array will be changed since we accepted a reference to it.
}
$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3);
multi_unset($arr, $unset);
print_r($arr);
于 2012-09-02T04:14:29.053 回答
0

稍微修改您的版本并处理返回值。

function multi_unset($array, $unset)
{
    $retVal = array();
    foreach($array as $key => $value)
    {
        $remove = false;
        foreach($unset as $checkKey)
        {
            if ($value[$checkKey] == "-")
                $remove = true;
        }
        if (!$remove)
            $retVal[] = $value;
    }
    return $retVal;
}

$arr = array(array("-", "test", "test", "test"), array("test", "test", "test", "test"));
$unset = array(0, 2, 3);
$arr = multi_unset($arr, $unset);
print_r($arr);
于 2012-09-02T04:21:12.270 回答