簡體   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