2016-06-29 77 views
0

比方說,我有一個這樣的數組:獲取所有值

$array = [ 
    'car' => [ 
     'BMW' => 'blue', 
     'toyota' => 'gray' 
     ], 
    'animal' => [ 
     'cat' => 'orange', 
     'horse' => 'white' 
     ] 
    ]; 

然後,我想獲得的所有值(色彩,'blue''gray''orange''white'),並加入他們的行列成一個單一的數組。我怎麼做,而不使用foreach兩次?

在此先感謝。

+0

編寫使用'換each'兩次,然後就調用該函數的函數。 –

+0

我有,但不會影響我每次打電話時的表現嗎? – Vaivez66

+0

我不熟悉PHP,所以我不知道是否有一個內置的函數可以實現你想要的,並且不使用嵌套for循環。我不會擔心迭代兩個數組,除非它真的很明顯。不成熟的優化是萬惡之源。 –

回答

0

試試這個:

function get_values($array){ 
    foreach($array as $key => $value){ 
     if(is_array($array[$key])){ 
      print_r (array_values($array[$key])); 
     } 
    } 
} 

get_values($array); 
0

如果你不關心的指標,那麼這應該這樣做:

$colors = array(); 
foreach ($array as $item) { 
    $colors = array_merge($colors, array_values($item)); 
} 

如果你想保持你可以使用索引:

$colors = array(); 
foreach ($array as $item) { 
    // this leaves you open to elements overwriting each other depending on their keys 
    $colors = array_merge($colors, $item); 
} 

我希望這有助於。

1

我怎麼做,沒有使用的foreach兩次?

首先使用RecursiveIteratorIterator類拼合多維數組,然後應用array_values()函數來獲得在單個陣列中所需的顏色值。

下面是引用:

所以,你的代碼應該是這樣的:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 
$flatten_array = array_values(iterator_to_array($iterator,true)); 

// display $flatten_array 
echo "<pre>"; print_r($flatten_array); 

這裏的live demo

0

下面是一個遞歸函數,它可以讓你獲得這些端點值的數組,或者獲得一個數組,其中所有的鍵都是完整的,但只是變平了。

代碼:

<?php 

$array = [ 
    'car' => [ 
     'BMW' => 'blue', 
     'toyota' => 'gray' 
     ], 
    'animal' => [ 
     'cat' => 'orange', 
     'horse' => 'white' 
     ] 
    ]; 

// 
print "\n<br> Array (Original): ".print_r($array,true); 
print "\n<br> Array (Flattened, With Keys): ".print_r(FlattenMultiArray($array,true),true); 
print "\n<br> Array (Flattened, No Keys): ".print_r(FlattenMultiArray($array,false),true); 

// 
function FlattenMultiArray($array,$bKeepKeys=true,$key_prefix='') 
{ 
    // 
    $array_flattened=Array(); 

    // 
    foreach($array as $key=>$value){ 

     // 
     if(Is_Array($value)){ 
      $array_flattened=Array_Merge(
       $array_flattened, 
       FlattenMultiArray($value,$bKeepKeys,$key) 
      ); 
     } 
     else{ 
      if($bKeepKeys){ 
       $array_flattened["{$key_prefix}_{$key}"]=$value; 
      } 
      else{ 
       $array_flattened[]=$value; 
      } 
     } 
    } 

    return $array_flattened; 
} 

?> 

輸出:

<br> Array (Original): Array 
(
    [car] => Array 
     (
      [BMW] => blue 
      [toyota] => gray 
     ) 

    [animal] => Array 
     (
      [cat] => orange 
      [horse] => white 
     ) 

) 

<br> Array (Flattened, With Keys): Array 
(
    [car_BMW] => blue 
    [car_toyota] => gray 
    [animal_cat] => orange 
    [animal_horse] => white 
) 

<br> Array (Flattened, No Keys): Array 
(
    [0] => blue 
    [1] => gray 
    [2] => orange 
    [3] => white 
)