循环处理空值的数组

时间:2017-08-02 15:45:05

标签: php arrays

我有一个数组myArray

Array ([0] =>(
         Number => 02348
         Food => Array (
             [0] => orange
             [1] => apple
             [2] => plum )
         State => Array (
             [0] => california
             [1] => texas
             [2] => arizona )
        Status => good )
       [1] =>(
         Number => 34
         Food => Array (
             [0] => grape
             [1] => bannana
             [2] => tomato )
        Status => rotten )
        [2] =>(
         Number => 007
         Food => Array (
             [0] => oranges
             [1] => apples
             [2] => plums )
         State => Array (
             [0] => ohio
             [1] => utah
             [2] => vermont )
        Status => good )

我正在循环我的阵列,然后抓住我需要的字段。

for($index=0; $index < count($myArray); $index++){
   $food = array_values(array_filter($myArray[$index]["Food"]));
   $states = array_values(array_filter($myArray[$index]["State"]));

对于$ states行,我收到错误

Notice: Undefined index: State 
Warning: array_filter() expects parameter 1 to be array, null given

正如你在我的阵列中看到的那样,State可能并不总是存在,有没有办法解决这个问题。还有大量数据被动态拉动,并且很难改变阵列的结构。 我怎么能循环我的数组忽略空值但仍然保持状态的位置。例如

State => Array (
         [0] => ohio
         [1] => utah
         [2] => vermont )

仍然会映射到[2],而不会转移到[1]。

1 个答案:

答案 0 :(得分:1)

$states = array_values(array_filter($myArray[$index]["State"]));

使用代码中的上述示例,array_filter函数需要一个数组,因此您需要检查传递给函数的变量$myArray[$index]["State"]是否已设置,还是数组。这将删除通知和警告。

您可以使用is_array()函数测试数组,并测试是否使用isset()函数设置了变量。

在此示例中,使用数组中的数据设置中间变量$states_array。它检查原始变量是否有效,否则,它将设置为空数组。然后将其传递到array_filter函数。

$states_array = (isset($myArray[$index]["State"]) && is_array($myArray[$index]["State"])) ? $myArray[$index]["State"] : array() ;
$states = array_values(array_filter($states_array));

您可能也有兴趣知道PHP 7提供了一个null coalesce运算符,在处理可能设置或未设置的变量时可能会有所帮助。

见:

http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

https://lornajane.net/posts/2015/new-in-php-7-null-coalesce-operator