【问题标题】:FInd key based on value from multi dimensional array in php [duplicate]基于php中多维数组的值查找键[重复]
【发布时间】:2019-02-15 22:27:06
【问题描述】:

以下是我用过的数组结构

    $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**

【问题讨论】:

  • 那么,如果你搜索40489,输出应该是uid,如果你搜索urlof100,输出应该是pic_square?在这种情况下,如何处理双精度值?例如,可能有两次相同的名称
  • 我认为这可能会对您有所帮助。 stackoverflow.com/questions/8102221/…
  • HI RIGGSFOLLY - 您提到的以下链接可能是同一个问题,但我需要的输出不同。我的要求不同,这就是我添加问题的原因。 PHP多维数组搜索(按特定值查找键)

标签: php


【解决方案1】:
$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";
    }
}

【讨论】:

  • 请注意,我提出这个答案是因为存在本机函数来这样做,所以我假设您的算法中不需要它们
  • 我使用上面的代码得到了输出。有没有不使用循环得到结果的方法
  • 因为你必须检查数组的每个元素,我想你必须这样做。还可以做的是输入类型的值。因此,如果它是数字,则您知道您的密钥是 uid,如果不是,请尝试正则表达式匹配以查看它是否以“urlof”开头,并且您无需查看数组即可拥有它
  • 嗨 RiggsFolly - 您提到的以下链接可能是相同的问题,但我需要的输出不同。我的要求不同,这就是我添加问题的原因。 PHP多维数组搜索(按特定值查找键)
猜你喜欢
  • 2017-01-01
  • 2013-10-14
  • 2021-05-07
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2017-05-19
相关资源
最近更新 更多