我有一个数组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]。
答案 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