2014-01-31 74 views
2

什麼是最好的方法來返回相應的數組名稱(石頭,千克,磅)知道只是首字母縮寫值(ST,公斤,磅)?數組值的父數組鍵

 "weight" => [ 

      "stone" => [ 
       "acronym" => "st" 
      ], 
      "kilogram" => [ 
       "acronym" => "kg" 
      ], 
      "pound" => [ 
       "acronym" => "lb" 
      ] 

     ]; 
+1

迭代數組搜索首字母縮寫詞。 – Cthulhu

+0

我試過array_search('kg',array_keys($ weightArray));但array_keys()返回鍵的第一層。 0 =>石頭,1 =>千克等我試圖從公斤得到'千克'。 – ditto

回答

1
function name($array,$t){ 
    foreach($array as $k=>$a){ 
     if($a['acronym']===$t){return $k;} 
    } 

} 
0

有點羅嗦:

foreach($mainArray['weight'] as $key=>$value) { 
    if(is_array($value)) { 
    if(in_array($acronymValue, $value)) { 
    echo $key. "has the acronym value"; 
    break; 
    } 
    } 
} 

下面是它的工作演示:Fiddle

+0

如果'$ mainArray ['weight'] ['stone'] ['something'] ='kg''這會給你一個公斤的假陽性 – andrewtweber

0

您可以使用strtr();(如果確定更改您的陣列)

$converter = array(
    'st' => 'stone', 
    'kg' => 'kilogram', 
    'lb' => 'pound', 
); 

echo strtr('st', $converter); // stone 
0

儘管問題已經得到解答,但我仍想用回調匿名函數添加無迴路版本。

function getData($arr, $needle) 
{ 
    $f = array_filter($arr['weight'], function($v) use ($needle) { 
     if($v["acronym"] == $needle){ 
      return $v; 
     } 
    }); 
    list($k, $v) = each($f); 

    return $k; 

} 

echo getData($arr, "kg");