从数组循环显示PHP不需要的字符



我在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

最新更新