我试图从数组中获取某些值,但却被卡住了。这是阵列的外观:
array(2) {
[0]=>
array(2) {
["attribute_code"]=>
string(12) "manufacturer"
["attribute_value"]=>
string(3) "205"
}
[1]=>
array(2) {
["attribute_code"]=>
string(10) "silhouette"
["attribute_value"]=>
array(1) {
[0]=>
string(3) "169"
}
}
}
所以从中我想拥有attribute_values,并将其插入到一个新数组中,所以在这个例子中我需要205和169.但问题是attribute_value可以是数组或字符串。这就是我现在所拥有的,但它只给我第一个值 - 205。
foreach ($array as $k => $v) {
$vMine[] = $v['attribute_value'];
}
我在这里缺少什么?
谢谢!
答案 0 :(得分:1)
如果有时,attribute_value
可以是一个数组,并且在其中包含值,您可以使用is_array()
函数检查循环内部(如果这是最大级别)。例如:
$vMine = array();
foreach ($array as $k => $v) {
if(is_array($v['attribute_value'])) { // check if its an array
// if yes merge their contents
$vMine = array_merge($vMine, $v['attribute_value']);
} else {
$vMine[] = $v['attribute_value']; // if just a string, then just push it
}
}
答案 1 :(得分:0)
我建议您使用array_map
代替for loop
。你可以试试这样的东西......
$vMine = array_map(function($v) {
return is_array($v['attribute_value']) ? current($v['attribute_value']) : $v['attribute_value'];
}, $arr);
print '<pre>';
print_r($vMine);
答案 2 :(得分:0)
尝试速记版本:
foreach ($array as $k => $v) {
$vMine[] = is_array($v['attribute_value']) ? current($v['attribute_value']):$v['attribute_value'];
}
或更容易理解的版本,两者都是相同的:
foreach ($array as $k => $v) {
if(is_array($v['attribute_value'])) {
$vMine[] = current($v['attribute_value']);
} else {
$vMine[] = $v['attribute_value'];
}
}