2015-04-01 54 views
0

鍵值我有以下陣列:PHP - 從其他關鍵

$array = Array(
    "0" => Array (
     "id" => 1081, 
     "name" => "John" 
    ), 
    "1" => Array (
     "id" => 1082, 
     "name" => "Matt" 
    ), 
    "2" => Array (
     "id" => 1083, 
     "name" => "Roger" 
    ) 
); 

有反正我能得到name,如果我只知道id但不必通過數組迭代?

+2

不,沒有。你爲什麼沒有把它作爲一個關聯數組呢? – Barmar 2015-04-01 20:35:41

+0

哦,這是我不幸的得到陣列。我無法改變它。不管怎樣,謝謝。 – Chris 2015-04-01 20:36:54

+0

@Chris 1.你可以改變你的數組結構?! 2.問題解答或者你是否仍然需要解決方案? – Rizier123 2015-04-01 20:38:08

回答

1

你可以讓一個關聯數組是指相同的元素,然後使用:

function make_assoc(&$array, $keyname) { 
    $new_array = array(); 
    foreach ($array as &$elt) { 
     $new_array[$elt[$keyname]] = $elt; 
    } 
    return $new_array; 
} 

$assoc_array = make_assoc($array, 'id'); 

現在你可以使用$assoc_array[1083]訪問原始數組中的第三項。由於這將返回一個引用數組,修改它也會修改原始數組的元素。

+0

1.在發佈之前總是很好2.閱讀[評論](http://stackoverflow.com/questions/29400234/php-get-key-value-from-other-key?noredirect=1#comment46976556_29400234) [$ elt [$ keyname] = $ elt;'missing] – Rizier123 2015-04-01 20:42:24

+3

我沒有改變數組結構,我創建了一個具有不同結構的新數組。 – Barmar 2015-04-01 20:43:32

2

對於PHP> = 5.5.0:

$id = 1082; 
$result = array_column($array, 'name', 'id')[$id]; 

由於Barmar指出的那樣,得到一個數組,它是容易id使用的指標:

$id = 1082; 
$result = array_column($array, 'name', 'id'); 
echo $result[$id]; 
0

您可以使用array_map搜索到您的陣列,如果您的PHP < 5.5.0並且您沒有array_column

<?php 

$array = Array(
    "0" => Array (
     "id" => 1081, 
     "name" => "John" 
    ), 
    "1" => Array (
     "id" => 1082, 
     "name" => "Matt" 
    ), 
    "2" => Array (
     "id" => 1083, 
     "name" => "Roger" 
    ) 
); 

$find = 1082; 
$value = ''; 

$arr = array_map(function($n) use ($find, &$value) {if ($n['id'] == $find) $value = $n['name']; }, $array); 


print_r($value); 

?> 
+2

這似乎比正常的搜索循環更糟糕,因爲它會在找到匹配之後繼續前進。 – Barmar 2015-04-01 20:47:31

+1

爲什麼OP需要大於5.5? (更新:爲什麼他需要<5.5?他不能在5.5以上使用它?) – Rizier123 2015-04-01 20:48:24

+0

@ Rizier123謝謝你是一個錯誤;-) – 2015-04-01 20:49:40