我在PHP中有这个数组:
$items = array(
array(
"info" => "This is my info",
"colors" => array(
"type" => "block",
array(
"name" => "Red",
"ref" => "red"
),
array(
"name" => "Blue",
"ref" => "blue"
),
),
),
);
我想像这样循环到color
数组:
foreach ($items as $item) {
foreach ($item['colors'] as $color) {
$color['name'];
}
}
问题是,第一个结果是b
来自block
。
我该如何改变这种行为?
谢谢。
您可以检查$color
值中是否存在name
元素:
foreach ($items as $item) {
foreach ($item['colors'] as $color) {
if (isset($color['name'])) {
$name = $color['name'];
// do something with it
}
}
}
对于给定的数组,引用第一个循环中的键来访问colors
,并检查$value是否是数组,如果是,然后检查array_keyname
是否在数组中,如果是的话,您就有了要查找的值。
//假设你知道数组级别,设计你的条件来检查你是否有一个数组-is_array
,如果你知道,确保目标密钥是in_array
,如果是,将目标密钥与值array_keys
进行比较,然后回显value['target_key']
foreach($items[0]['colors'] as $value){
if(is_array($value)){
if(in_array('name', array_keys($value))){
echo $value['name'].'<br>';
}
}
}
// slightly more dynamic way to use incrementor,
// though this assumes you still know the level of 'colors' and 'name'
$i = count($items);
for($j = 0; $j < $i; $j++){
foreach($items[$j]['colors'] as $value){
if(is_array($value)){
if(in_array('name', array_keys($value))){
echo $value['name'].'<br>';
}
}
}
}
// or check each level to see if is array and if target key is in array
$i = count($items);
for($j = 0; $j < $i; $j++){
foreach($items[$j] as $value){
if(is_array($value)){
if(in_array('colors', array_keys($value))){
foreach($value as $color){
if(is_array($color)){
if(in_array('name', array_keys($color))){
echo $color['name'];
}
}
}
}
}
}
}
每次迭代将输出:
Red
Blue