2014-01-13 146 views
0

我有一個內部數組的數組。我需要用f.x找到一個元素。 ['ID'=> 9],然後從中獲取國家/貨幣。我怎麼能找到這樣的元素?到目前爲止,我會循環檢查每個陣列的ID,我相信這可能會更簡單。謝謝!搜索數組中的元素

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR'), 
    ... 
); 

UPDATE 我想通過任意鍵能夠搜索:ID,國家,貨幣

+0

所以你_know_什麼ID是你找誰? –

+0

如果您知道您將始終在尋找什麼值並使用array_keys或array_key_exists(),則可以將某個鍵與每個子數組關聯以便於遍歷。 –

+0

好吧,我希望能夠通過任何鍵(ID,國家,貨幣)來查看元素。 –

回答

2

如果陣列的ID都是唯一的,那麼你可以使用array_filter(),如:

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
); 

$id = 9; 
$result = array_shift(array_filter($countries, function($item) use ($id) 
{ 
    return $item['ID']==$id; 
}))['Country']; 

- 但如果ID是非唯一的,上面的代碼將返回第一個找到的ID的國家。還要注意,這種解除引用的方式只能在PHP> = 5.4中使用(在早期版本中,您必須首先找到數組元素,然後訪問它的Country鍵)。

要按任意鍵搜索,你可以使用:

$key = 'ID'; 
$value = 9; 
$result = array_shift(array_filter($countries, function($item) use ($key, $value) 
{ 
    //change == to === for strict comparison: 
    return array_key_exists($key, $item) && $item[$key]==$value; 
})); //whole element, not only 'Country' key what cause if search will be by Country? 
+0

這個答案對我來說最重要,謝謝。 –

2

最簡單的辦法是解決它,所以當你建立數組,你把ID爲陣列的鍵。因此,它看起來像

$countries = array(
    8=>array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    9=>array('ID' => '9','Country' => 'France','Currency' => 'EUR'), 
    ... 
); 

然後你可以簡單的做$countries[8]

+0

Nah,會是'$ countries [8] ['id']'或'$ countries [8] ['Country']',它是多維的:) –

+1

@ Mr.Alien這將是如果你想要一個特定的鍵在那個陣列中。你可以通過執行'$ countries [8]'來獲得整個數組。看看你是如何做到你的每個例子的第一部分? * smh * – Jessica

+0

很明顯,但接下來的問題是,現在我試圖'回聲',但它不起作用,因爲他寫*,然後從中得到國家/貨幣* –

0

類似PHP multidimensional array search by value

[OR]

可以使ID作爲父數組的索引並訪問其值直接使用ID。 例如:

$countries = array(
8 => array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
9 => array('ID' => '9','Country' => 'France','Currency' => 'EUR'), 
... 
); 
0

現場演示:https://eval.in/88626
試試這個:

創建一個ID一個新的數組作爲這樣的關鍵:

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
); 
$outArray = array(); 
foreach($countries as $country){ 
$outArray[$country['ID']] = $country; 
} 

訪問陣列,通過其ID喜歡這

print_r($outArray[8]['Country']); 

輸出:

Finland 

更新搜索:
現場演示:https://eval.in/88651

$countries = array(
     array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
     array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
    ); 
$r1 = getArrayById($countries,8); 
$r2 = getArrayById($countries,'Finland'); 
$r3 = getArrayById($countries,'EUR'); 

    print_r($r1); 
    print_r($r2); 
    print_r($r3); 

function getArrayById($countries,$val){ 
$outArray = array(); 
    foreach($countries as $country){ 
    if(in_array($val,$country)){ 
     $outArray[$country['ID']] = $country; 
     } 
    } 
    return $outArray; 
} 

輸出:

Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

) 


Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

) 


Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

    [9] => Array 
     (
      [ID] => 9 
      [Country] => France 
      [Currency] => EUR 
     ) 

) 
0

您可以創建應該爲你做的工作的功能,它不會得到重複的ID。

工作例如:example

$countries = array(
    array('ID' => '8','Country' => 'Finland','Currency' => 'EUR'), 
    array('ID' => '9','Country' => 'France','Currency' => 'EUR') 
); 

echo '<pre>'; 

function find($word, $countries, $result = null){ 

    foreach($countries as $k => $v){ 

     if(in_array($word, $v)){ 
      $result[$v['ID']] = $v; // Do not get duplicated id's 
     } 
    } 
    return $result; 
}; 

$result = array(); 

$result = find('Finland', $countries); // Get's ID 8 
$result = find('EUR', $countries, $result); // Get's id 8 and 9, don't duplicate 
$result = find('9', $countries, $result); // Get ids 9 but don't duplicate 

print_r($result); 

輸出

Array 
(
    [8] => Array 
     (
      [ID] => 8 
      [Country] => Finland 
      [Currency] => EUR 
     ) 

    [9] => Array 
     (
      [ID] => 9 
      [Country] => France 
      [Currency] => EUR 
     ) 
)