Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在多维数组中取消设置具有特定值的数组?_Php - Fatal编程技术网

Php 在多维数组中取消设置具有特定值的数组?

Php 在多维数组中取消设置具有特定值的数组?,php,Php,我正在检查多维数组中的子数组中的某些元素是否不等于某个值,并使用多维数组中的该值取消设置数组。我构建了一个函数,这样我就可以很容易地实现它,但是它似乎不起作用 function multi_unset($array, $unset) { foreach($array as $key=>$value) { $arrayU = $array[$key]; $check = array(); for($i = 0; $i < coun

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

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]
function multi_unset($array,$unset){
foreach($key=>$value的数组){
$arrayU=$array[$key];
$check=array();
对于($i=0;$i

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

您可能需要阅读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);

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

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);

您没有通过引用传递数组。。。所以
multi_unset($arr,$unset)
实际上对$arr没有任何作用。或者使用
multi_unset(&$arr,$unset)通过引用
或使用返回值
$arr=multi\u unset($arr,$unset)
。添加到我之前的评论中:调用时间传递引用实际上在PHP5.3.0中被弃用,在5.4.0中被删除。我认为他实际上想从数组中删除整个子数组,而不仅仅是子数组中的一个键值对。可能是弄错了,给ccKep打个好电话!在这种情况下:
if($found){unset($array[$pos]);}
并注释掉if后面的行。在研究代码之后,您基本上创建了一个不等于“-”的新元素数组。对吗?他们不赞成在函数中更改数组。$arr=multi_unset($arr,$unset);是否属于这一类?