2017-02-14 61 views
2

我正在學習PHP,我正在尋找一個給定的字符串搜索數組,並返回一些值,如果它匹配。我曾嘗試使用in_array()array_search,但兩者都無法正確匹配/返回值。檢查一個字符串的2D關聯數組,返回信息(PHP)

print_r($ names);

Array 
(
    [0] => Array 
     (
      [name] => A 
      [age] => 42 
      [location] => Australia 
     ) 

    [1] => Array 
     (
      [name] => B 
      [age] => 21 
      [location] => France 
     ) 

    [2] => Array 
     (
      [name] => Z 
      [age] => 50 
      [location] => Japan 
     ) 
) 

我想檢查,看是否有名字在陣列中存在,並返回信息相同的索引位置。

$name="A"; 
if (in_array($name, $names)) { 
    $age=$names['age']; 
    $location=$names['location']; 
    echo "$name was found! Their Age is: $age, They are based in: $location"; 
} 
else{ 
    echo"$name was not found"; 
} 

但是,名稱未找到,並且未加載年齡和位置數據。

輸出:

A was not found 

預期輸出:

A was found! Their Age is: 42, They are based in: Australia 

試驗:使用array_search()

$result = array_search("$name",$names); 
echo $result; 

未打印任何值。

有關如何修復我的(in_array)或如何使用array_search()列出信息的任何反饋將不勝感激。

回答

2

你可以試試這個 -

$position = array_search($name, array_column($your_array, 'name')); 
$info = $your_array[$position]; 

說明

array_column($your_array, 'name') 

將與各指標均名返回數組。

array_search($name, array_column($your_array, 'name')) 

將返回找到該名稱的索引。

$info = $your_array[$position] 

將存儲特定的子陣列在$info

所以它應該是喜歡 -

echo $info['name'] . " was found! Their Age is: " . $info['age'] . ", They are based in: " . $info['location']; 

array_column() & array_search()

Working code

+0

完美!謝謝@Sougata Bose爲您的快速回復和解釋每一步如何工作,這對像我這樣的初學者非常有用:) – Ben

+0

是否也可以繼續搜索另一個同名實例? 如果搜索$ name ='Z'並且存在Z的兩個實例,您是否可以顯示兩個實例的信息? '2'=>數組 ( '名稱'=> 'Z', '年齡'=> 50, '位置'=> '日', ) '999'=>數組 ( 'name'=>'Z', 'age'=> 99, 'location'=>'Finland', ) Z was found!他們的年齡是:50,總部設在:日本 Z被發現!他們的年齡是:99,他們的總部設在:芬蘭 – Ben

+1

在這種情況下,您必須使用循環並取消第一個發現 –

相關問題