2017-08-25 63 views
0

可能有一種非常簡單的方法可以做到這一點,但我無法解決這個問題。PHP Array獲取第一項

Array ([0] => Array ([] => US [1] => U.S. [2] => 21 [3] => 34 [4] => 33 [5] => 35 [6] => 39 [7] => 50 [8] => 61) [1] => Array ([] => 79 [1] => 45 [2] => 84 [3] => 89 [4] => 59 [5] => 64 [6] => 34 [7] => 58 [8] => 55) [2] => Array ([] => 63 [1] => 105 [2] => 68 [3] => 62 [4] => 64 [5] => 67 [6] => CL [7] => Chile [8] => 56) [3] => Array ([] => 40 [1] => 40 [2] => 63 [3] => 37 [4] => 57 [5] => 64 [6] => 59 [7] => 53 [8] => 68) [4] => Array ([] => 70 [1] => 66 [2] => 88 [3] => 48 [4] => 76 [5] => 83 [6] => 80 [7] => 53 [8] => 45) [5] => Array ([] => 44 [1] => 51 [2] => 52 [3] => [4] => [5] => [6] => [7] => [8] =>)) 

這是我的數組。每種方法都有相同數量的對象(9),但是當前在6的數量可能會增加。

我需要得到第一個項目中的每個所以第一我需要的(美國),我堅持,如果我把

echo $array[0][1]; 

然後我讓我們不過,我需要的第一項(美國)所以我想都

echo $array[0][0]; 
echo $array[0][]; 

既不返回一個值。我究竟做錯了什麼?

+4

在你的例子中,沒有第一個數組元素的鍵,我敢肯定這是不可能的 – GrumpyCrouton

+2

@GrumpyCrouton是的,PHP中有一個空的數組鍵;要訪問這樣的元素,那麼必須明確指定一個「空鍵」 - 「$ foo ['']' – CBroe

+0

所以應該像'echo $ array [0] [''];'。這在我看來是不好的數據結構設計... – PeterM

回答

0

其他答案對我不會重申的空鍵提供了很好的解釋,但是獲取每個子陣列中第一項的簡單方法是映射我們在註釋中提到的reset函數你的主陣列。

$firsts = array_map('reset', $your_array); 

無論關鍵是什麼,這應該工作。

0

如果我是你,我會問自己,爲什麼我的陣列有一個空鍵開始,我最好的猜測是,你寫這樣的事情連鍵設置你的子陣列,而不是讓它正在逐步建立索引:

array(
    '' => 'US', // Maybe a '0' was intended to be there, and it's a type. 
    '1' => 'U.S.', 
    '2' => '21', 
    '3' => '34', 
    '4' => '33', 
    // etc... 
); 

在這種情況下,您可以從修復代碼或至少更新代碼中獲益,以便您的數組可以使用,例如通過刪除鍵以便使用連續索引來替換它們。

無論如何,如果你想使用當前的陣列,這樣做:

echo $array[0]['']; 

或者遍歷它:

foreach ($array as $sub) { 
    echo $sub[''],'<br>'; 
} 

如果你沒有在陣是如何設置的控制,您也可以使用array_values()重新編制索引。這個函數接受一個數組作爲參數,並與連續的指標,而不是原來的鍵返回它的值:

foreach ($array as $key => $sub) { 
    $array[$key] = array_values($sub); 
} 

該代碼應該給你相同的陣列比以前與空鍵與0替代除外。

2

在PHP中,可以在關聯數組中使用「空」字符串作爲鍵。

它與任何其他非空字符串鍵值有明顯不同 - 因此它滿足您對這樣一個鍵的最基本要求(並且PHP人似乎沒有看到任何需要明確地阻止這種鍵。 )

$arr = [ 
    'foo' => 'bar', 
    '' => 'baz', 
]; 

的print_r將顯示這是

Array 
(
    [foo] => bar 
    [] => baz 
) 

和var_dump'ed它是這樣的,

array(2) { 
    ["foo"]=> 
    string(3) "bar" 
    [""]=> 
    string(3) "baz" 
} 

後者使得它更加明顯,關鍵是實際上是一個空字符串,因此$arr[""] resp。可以使用$arr['']來訪問這個元素。

有人可能會考慮這個PHP的特性之一 - 它確實是工作,但它在實踐中很少使用,因爲它對大多數使用情況並不合適。