Php 在处理空值的数组中循环

Php 在处理空值的数组中循环,php,arrays,Php,Arrays,我有一个数组myArray Array ([0] =>( Number => 02348 Food => Array ( [0] => orange [1] => apple [2] => plum ) State => Array ( [0] => california

我有一个数组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"]));
正如您在我的数组中所看到的,状态可能并不总是存在,是否有办法解决此问题。此外,还有大量数据正在被动态提取,因此很难更改阵列的结构。 如何在忽略空值但仍保留状态的情况下循环数组。比如说

State => Array (
         [0] => ohio
         [1] => utah
         [2] => vermont )
仍将映射到[2],而不会移动到[1]

$states = array_values(array_filter($myArray[$index]["State"]));
使用代码中的上述示例,
array\u filter
函数需要一个数组,因此需要检查传递给函数的变量
$myArray[$index][“State”]
是否已设置且也是数组。这将删除通知和警告

您可以使用
is\u array()
函数测试数组,并使用
isset()
函数测试是否设置了变量

在本例中,使用数组中的数据设置中间变量
$states\u array
。它检查原始变量是否有效,否则,它将设置为空数组。然后将其传递到
array\u filter
函数中

$states_array = (isset($myArray[$index]["State"]) && is_array($myArray[$index]["State"])) ? $myArray[$index]["State"] : array() ;
$states = array_values(array_filter($states_array));
您可能还想知道PHP7提供了一个null coalesce操作符,它在处理可能设置或可能未设置的变量时可能会很有用

见:


可能重复使用isset($myArray[$index][“State”])修复一条警告,另一条如下。在使用之前,请检查是否设置了索引。请澄清这句话:“但仍然保留状态的位置”。您可能在之后对状态和食物做了一些事情-在数组中收集还是什么?有些索引不存在,因为有些是空的,所以在这种情况下,状态的值为2。食物的价值是3。
$states_array = (isset($myArray[$index]["State"]) && is_array($myArray[$index]["State"])) ? $myArray[$index]["State"] : array() ;
$states = array_values(array_filter($states_array));