2008-09-16 127 views
3

我有以下代碼片段。foreach訪問索引或關聯數組

$items['A'] = "Test"; 
$items['B'] = "Test"; 
$items['C'] = "Test"; 
$items['D'] = "Test"; 

$index = 0; 
foreach($items as $key => $value) 
{ 
    echo "$index is a $key containing $value\n"; 
    $index++; 
} 

預期輸出:

0 is a A containing Test 
1 is a B containing Test 
2 is a C containing Test 
3 is a D containing Test 

有沒有辦法離開了$index變量?

回答

11

您的$ index變量有一種誤導。這個數字不是索引,你的「A」,「B」,「C」,「D」鍵是。您仍然可以通過編號索引$ index [1]訪問數據,但這不是重點。如果你真的想保持編號的指數,我幾乎重組數據:

 
$items[] = array("A", "Test"); 
$items[] = array("B", "Test"); 
$items[] = array("C", "Test"); 
$items[] = array("D", "Test"); 

foreach($items as $key => $value) { 
    echo $key.' is a '.$value[0].' containing '.$value[1]; 
} 
+0

其實它是索引,A,B,C和D是數組鍵。 – 2008-09-16 01:43:26

+0

但是你對數據重構是正確的,你的例子幾乎就是我最終的結果。 :) – 2008-09-16 01:44:17

5

你可以這樣做:

$items[A] = "Test"; 
$items[B] = "Test"; 
$items[C] = "Test"; 
$items[D] = "Test"; 

for($i=0;$i<count($items);$i++) 
{ 
    list($key,$value) = each($items[$i]); 
    echo "$i $key contains $value"; 
} 

我都沒有這樣做之前,但在理論上它應該工作。

+0

這應該被接受的答案。工作示例:http://sandbox.onlinephpfunctions.com/code/84b7bc658e0c18ebebd809083b9fce3af5ea084c – Justinas 2016-05-25 11:00:13

1

要小心你如何定義你的鑰匙。雖然你的例子的作品,它可能並不總是:

$myArr = array(); 
$myArr[A] = "a"; // "A" is assumed. 
echo $myArr['A']; // "a" - this is expected. 

define ('A', 'aye'); 

$myArr2 = array(); 
$myArr2[A] = "a"; // A is a constant 

echo $myArr['A']; // error, no key. 
print_r($myArr); 

// Array 
// (
//  [aye] => a 
//)