2014-02-07 33 views
0

我有一個矩陣¹²³結構如下存在(它是動態的,可能會或可能不會包含這些鍵(甚至更多))如何找到某個鍵​​在矩陣

array(
    "where" => array(
     "data_col1": "val1", 
     "data_col2": "val2" 
    ), 
    "like" => array(
     "data_col3": "val3" 
    ) 
); 

我需要做的是找到$ var_with_data_col_name是否存在。

使用array_key_exists我可以檢查「where」或「like」是否存在,但我找不到一種方法來檢查它們是否存在特定的鍵。


PS:

$ var_with_data_col_name將與下列字符串一個一個變量:通過 「主陣列」

- data_col1 
- data_col2 
- data_col3 
+1

你應該使用遞歸 –

+0

如果你想檢查該變量值是否存在,那麼你可以使用「array_key_exists」作爲該 –

+0

我不想使用遞歸,如果有函數已經存在或簡單的方法。 –

回答

1

您無法搜索陣列鍵或值直接在多維數組中。然後遍歷數組並搜索它。

$data_column_1_exists = false; 
foreach($array as $key => $value) 
{ 
    if(array_key_exists('data_col1', $value) 
     && $key == 'where' //optionally check in specific array 
    ) 
    { 
     $data_column_1_exists = true; 
    } 
} 
+0

Like [@RoyalBg](http://stackoverflow.com/questions/21626674/how-to-find-if-a-key-exist-in-a-matrix/21626711?noredirect=1#comment32679275_21626674)和[@喬恩](http://stackoverflow.com/questions/21626674/how-to-find-if-a-key-exist-in-a-matrix/21626711?noredirect=1#comment32679710_21626674)說。遞歸是要走的路:/ –

0

Itterate並使用相同的功能,用於檢查每個「子陣列」的密鑰

1

您可以使用此 -

function key_exists_level2($arr, $key){ 
    foreach($arr as $level1arr){ 
     if(isset($level1arr[$key])){ 
      return true; 
     } 
    } 
    return false; 
} 
//And check with 
key_exists_level2($arr, $var_with_data_col_name) 
+0

+1這是一種「有趣」的方式。 –

0

您可以使用此代碼,它給你的key..which有你的$ var_with_data_col_name。

$data = array(
"where" => array(
    "data_col1" => "val1", 
    "data_col2" => "val2" 
), 
    "like" => array(
    "data_col3" => "val3" 
) 
); 

$key; 
$flag = false; 
$data_key = 'data_col1'; 

foreach($data as $our_key => $array){ 
if(array_key_exists($data_key,$array)){ 
    $key = $our_key; 
    $flag = true; 
} 
} 

if($flag){ 
print_r($data[$key]); 
} 
0

我確定已經有一個功能在那裏,更多的鍛鍊爲我自己!

function recursive_array_key_exists($needle, array $haystack) { 
    if (array_key_exists($needle, $haystack)) return true; 

    foreach($haystack as $value) { 
     if (is_array($value)) { 
      if (recursive_array_key_exists($needle, $value)) return true; 
     } 
    } 

    return false; 
} 

剛纔看到的評論鏈接到這樣的回答:array_key_exists is not working

我想我的是基本一致只是更少的代碼!