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