2016-05-16 50 views
1

定的數組中提取關鍵我們有看起來像這樣從「價值」

<?php 
    $list = array(
     'liquid'=>array('water','soft drink'), 
     'solid'=>array('car','computer','floor'), 
     'gas'=>array('air','oxygen','carbon dioxide'), 
    ); 
?> 

數組現在這只是一個例子列表,我們正在努力實現的是

用戶通過這樣

<?php 
    function return_state($matter_value){ 
     return array_search($matter_value, $list); 
    } 
?> 
  • 用戶函數中的值傳遞water結果應該是理屈ID
  • 用戶通過floor結果應該是固體
總之無論用戶是通過它將返回它

但是當我們正在執行相關的關鍵

這個函數,它返回''(空值)。

我們做錯了什麼?

+1

你也應該得到一個錯誤,告訴您$列表不存在,因爲它超出範圍爲你的函數,所以你需要將它傳遞給函數作爲參數 –

+0

然後使用foreach循環遍歷每個頂級數組的值,並做你的array_search,只有在發現匹配時才返回 –

+0

@runningmark,你需要檢查答案[Frayne Konok](http://stackoverflow.com/questions/37248607/extracting- key-from-given-array-with-value/37248736#37248736) –

回答

2

只是foreach循環與in_array讓一切變得簡單。

$list = array(
     'liquid'=>array('water','soft drink'), 
     'solid'=>array('car','computer','floor'), 
     'gas'=>array('air','oxygen','carbon dioxide'), 
    ); 
function return_state($matter_value, $list){  
    foreach($list as $key => $val){ 
     if(in_array($matter_value, $val)) 
      return $key;   
    } 
    return 'Not found.'; 
} 

echo return_state('floor', $list); //solid 

通過函數調用傳遞你的數組。

+0

避免使用'global'變量。將列表作爲函數的參數傳遞。 –

+0

我只關注OP。 Okey答案將被更新。 –

0

array_search無法在內部數組中找到。它將查看主陣列,即液體,固體,氣體及其值(不是陣列)。您需要通過主陣列的鍵循環搜索鍵。

<?php 
    function return_state($matter_value,$list){ 
     foreach($list as $key=>$item){ 
      $test=array_search($matter_value, $item); 
      if($test!==FALSE){ 
       return $key; 
      } 
     } 
    } 
?> 
1

使用foreach環和in_array功能:

function return_state($matter_value = ""){ 
    $list = [ 
     'liquid' => ['water','soft drink'], 
     'solid' => ['car','computer','floor'], 
     'gas' => ['air','oxygen','carbon dioxide'], 
    ]; 
    if (!empty($matter_value)) { // avoids empty arguments 
     foreach ($list as $key => $items) { 
      if (in_array($matter_value, $items)) { 
       return $key; 
      } 
     } 
    } 
    return false; 
} 

print_r(return_state("water")); // "liquid" 
print_r(return_state("floor")); // "solid" 
+0

'trim'返回修剪後的字符串。你應該把它分配給'matter_value'變量,否則函數調用是沒有用的。分配後可以使用'empty'功能確保字符串不爲空 –

+1

@MateiMihai,改爲'empty',謝謝 – RomanPerekhrest

0

這是另一個解決方案。它使matter_value成爲一個數組,並將其與$ list數組的每個元素相交。如果沒有匹配,結果將是null

function return_state($matter_value, $list) { 
    foreach ($list as $list_item_key => $list_item) { 
     if (! empty(array_intersect([$matter_value], array_values($list_item)))) { 
      return $list_item_key; 
     } 
    } 
}