-1

例如,我有一个关于在元素 = 0 的多维数组中取消设置数组的查询。

在下面的数组示例中

    [Something] => Array
(
    [Something1] => Array
    (
        [0] => Array
        (
            [@attributes] => Array
                (
                    [DataID] => Data
                    [DataID] => Data
                    [DataID] => Data
                    [DataID] => Data
                )

            [Something1.1] => Array
            (
                [Something1.1.1] => Array
                (
                    [0] => Array
                    (
                        [DataID] => Data
                        [Something] => 0
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                    )
                    [1] => Array
                    (
                        [DataID] => Data
                        [Something] => 4
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data

                    )
                    [2] => Array
                    (
                        [DataID] => Data
                        [Something] => 3
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data

                    )
                )
            )
            [Something1.2] => Array
            (
                [Something.1.2.1] => Array
                    (
                        [0] => Array
                    (
                        [DataID] => Data
                        [Something] => 0
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                    )
                    [1] => Array
                    (
                        [DataID] => Data
                        [Something] => 4
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data

                    )
                    [2] => Array
                    (
                        [DataID] => Data
                        [Something] => 2
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                        [DataID] => Data
                    )
                )
            )
        )
    )
)

例如,在我的代码中,虽然它似乎没有取消设置Somethings元素值为0的数组,但我有这个

foreach ($Somethings as $key2 => $Something) 
                        {
                            $value = 0;
                            if ($Somethings['Something - Element ID'] == $value) 
                            {
                                unset($Somethings[$key2]);                      
                            }       
                            $Something = array_values( $Something);
                            $Thingswithout0 = true;                         
                        }

例如,我想删除 Something1.1.1 [0]

[Something1.1] => 数组 ( [Something1.1.1] => 数组 ( [0] => 数组 (

如果里面的东西=> 0

4

2 回答 2

0

我在 foreach 循环中尝试了以下操作并使用 var_export 进行了调试,我可以看到根据指定的元素值完全按照要求删除了数组。接受 Markus 的建议,array_values 不再是“邪恶的”:)

    foreach ($av as $k => $a) 
    {
        $value= 0;                          
        if ($a['ElementID'] == $value) 
        {
            unset($a);                                                                  
        }
    }

这是一种安全且推荐的方法吗?

于 2021-11-16T23:52:18.780 回答
0

如果您只有一个foreach循环,那么您的错误是您array_values()在循环内部使用并在函数内部传递变量$Something而不是$Somethings.

但是如果你想遍历整个数组来找到那些“0”并删除它们的父母,你应该使用几个循环,然后你可以从多数组中删除正确的值。

所以假设示例中的多数组存储在一个名为 $array 的变量中:

// Go through each of the arrays saving the KEY at each foreach so as not to lose the thread.
foreach($array["Something"]["Something1"] as $key => $value) {
    foreach($value as $key1 => $value1){
        foreach($value1 as $key2 =>  $value2){
            // Because in this level we have values and arrays, we must loop only the arrays
            if(is_array($value2)) {
                foreach($value2 as $key3 =>  $value3) {
                    // Once looping the desired arrays, compare value
                    if($value3['Something'] == 0){
                        // Then remove the value you want by calling the original variable and tracing the path to the desired value
                        unset($array["Something"]["Something1"][$key][$key1][$key2][$key3]);
                    }
                }
            }
        }
    }
}

// Out of the loop, reindex the array
$array = array_values($array);
于 2021-11-17T00:13:01.163 回答