Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维数组循环以获取值_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 多维数组循环以获取值

Php 多维数组循环以获取值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个由多个不同级别的数组组成的数组。我试图做的是按键循环数组,它将遍历每个级别,获取这些键的值。myArray看起来像这样 Array ( [0] => Array ( [Date] => 2011-15-22 [Color] => blue [Status] => Fresh [1] => Array ( [Date] => 1999-08-04 [Color]

我有一个由多个不同级别的数组组成的数组。我试图做的是按键循环数组,它将遍历每个级别,获取这些键的值。myArray看起来像这样

Array ( [0] => 
  Array ( [Date] => 2011-15-22 
          [Color] => blue
          [Status] => Fresh 
        [1] => 
  Array ( [Date] => 1999-08-04 
          [Color] => green
          [Status] => Rotten) )
我试过了

foreach($myArray as $row){
  foreach($row["Date"] as $k){
     echo $k
    } 
 }
我得到了一份工作

Notice: Undefined index: Date 

警告:为foreach()提供的参数无效

因为
$row[“Date”]
是字符串

-foreach仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时,它将发出错误

注意:未定义索引:日期

可能您的数组中某个地方没有键为
Date
的元素(随着迭代的进行,您的数组结构可能会有所不同),因此您会收到此消息,请使用to或来验证,具体取决于目的

请注意
isset!=数组\u键\u存在

$a = array('key1' => 'test1', 'key2' => null);
isset($a['key2']);             // false
array_key_exists('key2', $a);  // true
还有一个重要的区别<当
$a
不存在时,code>isset不会抱怨,而
array\u key\u存在时
会抱怨

警告:为foreach()提供的参数无效

因为
$row[“Date”]
是字符串

-foreach仅适用于数组和对象,当您尝试在具有不同数据类型的变量或未初始化的变量上使用它时,它将发出错误

注意:未定义索引:日期

可能您的数组中某个地方没有键为
Date
的元素(随着迭代的进行,您的数组结构可能会有所不同),因此您会收到此消息,请使用to或来验证,具体取决于目的

请注意
isset!=数组\u键\u存在

$a = array('key1' => 'test1', 'key2' => null);
isset($a['key2']);             // false
array_key_exists('key2', $a);  // true

还有一个重要的区别<当
$a
不存在时,
isset
不会抱怨,而
array\u key\u存在时,
会抱怨。

正如axiac在注释中所述,
$row[“Date”]
是一个字符串,因此不可编辑。你可能只是想要这个:

foreach($myArray as $row){
  foreach($row as $k){
     echo $k
    } 
 }
通知
未定义索引:Date
还描述了出现的问题-您访问索引时没有检查它是否存在。看起来您的数据结构并不总是相同的。在这种情况下,应始终使用函数检查是否存在:

if (isset($row["Date"])) {
    //do something here
}
$arr = [
    [ 'Date' => '2011-15-22', 'Color' => 'blue', 'Status' => 'Fresh' ],
    [ 'Date' => '1999-08-04', 'Color' => 'green', 'Status' => 'Rotten' ]
];

array_walk_recursive($arr, function($v, $k){
    if ($k == 'Date') echo $v . PHP_EOL;
});

正如axiac在注释中所述,
$row[“Date”]
是一个字符串,因此不可编辑。你可能只是想要这个:

foreach($myArray as $row){
  foreach($row as $k){
     echo $k
    } 
 }
通知
未定义索引:Date
还描述了出现的问题-您访问索引时没有检查它是否存在。看起来您的数据结构并不总是相同的。在这种情况下,应始终使用函数检查是否存在:

if (isset($row["Date"])) {
    //do something here
}
$arr = [
    [ 'Date' => '2011-15-22', 'Color' => 'blue', 'Status' => 'Fresh' ],
    [ 'Date' => '1999-08-04', 'Color' => 'green', 'Status' => 'Rotten' ]
];

array_walk_recursive($arr, function($v, $k){
    if ($k == 'Date') echo $v . PHP_EOL;
});

看起来你只需要这个:

foreach($myArray as $row){
  echo $row["Date"]; 
 }


看起来你只需要这个:

foreach($myArray as $row){
  echo $row["Date"]; 
 }


只需使用
array\u walk\u recursive
函数:

if (isset($row["Date"])) {
    //do something here
}
$arr = [
    [ 'Date' => '2011-15-22', 'Color' => 'blue', 'Status' => 'Fresh' ],
    [ 'Date' => '1999-08-04', 'Color' => 'green', 'Status' => 'Rotten' ]
];

array_walk_recursive($arr, function($v, $k){
    if ($k == 'Date') echo $v . PHP_EOL;
});
输出:

2011-15-22
1999-08-04

只需使用
array\u walk\u recursive
函数:

if (isset($row["Date"])) {
    //do something here
}
$arr = [
    [ 'Date' => '2011-15-22', 'Color' => 'blue', 'Status' => 'Fresh' ],
    [ 'Date' => '1999-08-04', 'Color' => 'green', 'Status' => 'Rotten' ]
];

array_walk_recursive($arr, function($v, $k){
    if ($k == 'Date') echo $v . PHP_EOL;
});
输出:

2011-15-22
1999-08-04

在foreach上,应指定键和值,以便可以同时访问:

foreach ($myArray as $key => $value){
    echo $key.' is '. gettype ($value).'<br>';
    if (is_array($value)){
        foreach ($value as $subKey => $subValue){
            echo $subkey . ' => ' . $subValue . '<br>';
        }
    }
}
foreach($myArray作为$key=>$value){
echo$key.'is'.gettype($value)。“
”; if(是_数组($value)){ foreach($subKey=>$subValue形式的值){ 回显$subkey.'=>'.$subValue.'
'; } } }

通过这种方式,您可以在不丢失foreach上的结构的情况下访问和打印所有值,您应该指定键和值,以便可以同时访问:

foreach ($myArray as $key => $value){
    echo $key.' is '. gettype ($value).'<br>';
    if (is_array($value)){
        foreach ($value as $subKey => $subValue){
            echo $subkey . ' => ' . $subValue . '<br>';
        }
    }
}
foreach($myArray作为$key=>$value){
echo$key.'is'.gettype($value)。“
”; if(是_数组($value)){ foreach($subKey=>$subValue形式的值){ 回显$subkey.'=>'.$subValue.'
'; } } }

这样,您就可以在不丢失结构的情况下访问和打印所有值

您是否只收到这些错误?您确定所有元素的数组结构都完全相同吗(假设您有两个以上的项目)
$row[“Date”]
是一个字符串,
foreach
不会无缘无故地抱怨。只需执行
echo$row[“Date”]
-如果只需要日期,则无需嵌套foreach。@Calimero Yes结构对于所有阵列都是相同的可能重复的。。。当然,如果您愿意,您可以省略删除重复项的最后一步。您是否只收到这些错误?您确定所有元素的数组结构都完全相同吗(假设您有两个以上的项目)
$row[“Date”]
是一个字符串,
foreach
不会无缘无故地抱怨。只需执行
echo$row[“Date”]
-如果只需要日期,则无需嵌套foreach。@Calimero Yes结构对于所有阵列都是相同的可能重复的。。。当然,如果您愿意,您可以省略删除重复项的最后一步。我如何使用isset on date。日期以字符串形式返回。
isset
只做一件事:它告诉您变量是否为
null
(默认情况下每个变量都为空)。在那里传递什么并不重要。在添加if-isset语句后打印foreach的结果不会返回任何结果。但是如果我动态返回myArray[0][“Date”],它将返回content我如何使用isset on Date。日期以字符串形式返回。
isset
只做一件事:它告诉您变量是否为
null
(默认情况下每个变量都为空)。在那里传递什么并不重要。在添加if-isset语句后打印foreach的结果不会返回任何结果。但是,如果我动态返回myArray[0][“Date”],它将返回contentI。我去掉了第二个foreach,但得到了未定义的索引错误。Date是一个字符串如何修复此错误在添加if isset语句后打印foreach的结果不返回任何内容。但如果我动态返回myArray[0][“Date”],它将返回contentisset或array_key_exists(如果需要)用于验证,如果您的数组与上面的相同,则返回此
foreach($myArray as$row){e