2013-10-16 34 views
1

我需要遍歷數組並回顯前3個元素,但是我的問題是前3個不會始終在第一個父元素內。在我下面的例子,我需要得到內部元件的第3「物品」從多色調陣列中獲取前3項

array(
    0 => array(
     'Items' => array(
      0 => "dave", 
      1 => "steve" 
     ) 
    ), 
    1 => array(
     'Items' => array(
      0 => "megan" 
     ) 
    ) 
) 

在該示例中預期的結果將回聲 戴夫 史蒂夫 梅根

非常感謝! :)

+1

有什麼不對嵌套foreach循環和計數器拿到前三? – PeeHaa

+0

這就是我目前所擁有的,希望能夠使用一個漂亮的迭代器,但我想這會做 - 只是一個客戶端的小腳本。乾杯 –

回答

0

這將打印出正確的輸出:

$array = array(
    0 => array(
     'Items' => array(
      0 => "dave", 
      1 => "steve" 
     ) 
    ), 
    1 => array(
     'Items' => array(
      0 => "megan" 
     ) 
    ) 
); 

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 

for($i = 0; $i < 3; $i++) { 
    $it->next(); 

    $value = $it->current(); 
    echo $value, " "; 
} 
0

對於小數組,你可以使用array_walk_recursive

$output = array(); 

array_walk_recursive($array, function ($value, $key, $elements) { 
    if (count($elements) < 3) { 
     $elements[] = $value; 
    } 
}, $output); 

然而,對於一個大$array,這將是不必要的慢,因爲它遍歷整個數組只是爲了得到前3個元素。在這種情況下,你可以實現自己走:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 
$output = array(); 

while (count($output) < 3 && $iterator->valid()) { 
    $iterator->next(); 
    $output[] = $iterator->current(); 
} 
0

這裏我的代碼:

<?php 
    $arr = array(0 => array('Items' => array(0 => "dave",1 => "steve")),1 => array('Items' => array(0 => "megan"))); 
    $out = ''; 
    $c = 0; 
    foreach($arr as $all_items) { 
     foreach($all_items['Items'] as $ne_items) { 
      $out .= $ne_items.' '; 
      $c++; 
      if($c == 3) { 
       break; 
      } 
     } 
     if($c == 3) { 
      break; 
     } 
    } 

    echo $out;