基于php中多维数组值的FInd键

时间:2018-09-11 12:04:31

标签: php

以下是我使用的数组结构

    $arr =  Array ( 
                  [0] => Array 
                  (
                        [Research] => '#00c0ef' ,
                        [class_name] => box-info 
                   )
                  [1] => Array
                  ( 
                        [Review] => '#00a65a' ,
                        [class_name] => box-success 
                    ) 
                    [2] => Array 
                    ( 
                         [Case Study] => '#3c8dbc',
                          [class_name] => box-primary 
                     ) 
        );

我想获取'#3c8dbc'的密钥,这意味着我将获得案例研究的输出。

下面的代码是对此更好的解决方案吗?

 $search_value = '#3c8dbc';

  $selected_array = array_filter(array_map(function ($ar) use 
 ($search_value) {return array_search($search_value,$ar);}, $userdb));

  $selected_item = reset($selected_array);
  The $selected_item will print the key of value '#3c8dbc' .

   **Output :  Case Study**

1 个答案:

答案 0 :(得分:0)

$signal = false;
for($i = 0, $l = count($userdb); $i < $l; $i++) {
    $subarray = $userdb[$i];
    foreach ($subarray as $index => $value) {
        if ($value === $myValue) {
            $key = $index;
            $signal = true;
            break;
        }
    }
    if ($signal) { break; }        
}

if (isset($key)) {
    var_dump($key);            // key name of the subarray
    var_dump($userdb[$i]);     // full subarray. $i containing the index of it in $userdb
}

这应该可以解决问题。

我使用for循环遍历每个元素,因此可以将有趣的索引保留在循环末尾。找到元素后,我离开循环。希望对您有帮助

编辑(特定于问题中显示的数组)

// $myValue contains the input you have
if (gettype($myvalue) === "integer") {
    $key = "uid";
} else {
    if (preg_match("/^urlof/", $myValue)) {
        $key = "url";
    } else {
        $key = "name";
    }
}