2016-07-25 61 views
1

我有喜歡的數組:迭代通過PHP多維關聯數組時,每個鍵是一個字符串

$fruits = array(
    'citrus' => array(
    'fruit one' => 'orange', 
    'fruit two' => 'lime', 
), 
    'melon' => array(
    'fruit one' => 'honeydew', 
    'fruit two' => 'cantalope', 
), 
    'berry' => array(
    'fruit one' => 'raspberry', 
    'fruit two' => 'strawberry', 
), 
    'apple' => array(
    'fruit one' => 'granny smith', 
    'fruit two' => 'fuji', 
) 

); 

我希望能夠訪問它的片,像echo $fruits[0]['fruit one'];這樣我可以創造一個for循環來獲取數組的特定組。我的意思是,我想最好能像做:

for($i = 0; $i <= 1; $i++) 
    echo $fruit[$i]['fruit one']; 

// Then some other code 

for($i = 2; $i <= 3; $i++) 
    echo $fruit[$i]['fruit one']; 

當然我不能這樣做,因爲每個鍵是一個字符串。有沒有一個簡單的解決方案,或者我只是編寫這個愚蠢的?

編輯:我讓數組更長,以充分證明我正在嘗試做什麼。

+0

Tomulent,本的回答下面滿足你嗎?它可以讓你循環每個水果組中的每一個水果。如果這不是你想要的(我無法從OP中得知),請更改你要找的內容或更好地描述所需的輸出。 – BeetleJuice

+0

我編輯了原稿,希望能更清楚。我真正的數組裏面有40個數組。我需要一次在他們的範圍內。 – Tomulent

回答

1

array_slicedocs)剛剛對本作。

對於第2果組:

foreach(array_slice($fruits,0,2) as $fruitGroup) echo $fruitGroup['fruit one']; 

在接下來的2個果組:

foreach(array_slice($fruits,2,2) as $fruitGroup) echo $fruitGroup['fruit one']; 

Live demo

這具有簡化的好處(超過Chrys'溶液),並且不會破壞陣列中的原始鍵。

+0

切換我接受的答案,因爲這是最簡單的。 Chrys's可以在不破壞密鑰的情況下完成,但這需要更少的代碼。謝謝!你們今天都教了我一件事! – Tomulent

1
foreach ($fruits AS $fruit) { 
    foreach ($fruit AS $subFruit) { 
    // insert code here 
    } 
} 
1
function replaceKeys(&$array) 
{ 
    $ptr = null; 
    foreach ($array as $values) { 
     $ptr[] = $values; 
    } 
    $array = $ptr; 
} 

$fruits = array(
    'citrus' => array(
    'fruit one' => 'orange', 
    'fruit two' => 'lime', 
), 
    'melon' => array(
    'fruit one' => 'honeydew', 
    'fruit two' => 'cantalope', 
) 
); 


replaceKeys($fruits); 

var_dump($fruits[0]['fruit one']); 

//Output: orange 
+0

完美的作品,謝謝! – Tomulent

+1

Chrys你實際上並不需要'$ i'。只需使用'$ ptr [] = $ values'添加值,PHP將爲您自動遞增鍵值。 – BeetleJuice

+1

是的,你是對的。 –

相關問題