繁体   English   中英

PHP遍历数组

[英]php loop through array

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

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

我在这里想念的是什么?

谢谢!

如果有时, 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
    }
}

我建议您使用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);

尝试速记版本:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM