php循环遍历数组

时间:2014-09-11 03:07:28

标签: php arrays

我试图从数组中获取某些值,但却被卡住了。这是阵列的外观:

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'];
}

我在这里缺少什么?

谢谢!

3 个答案:

答案 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']; 
    }
}