【问题标题】:How can I find the key of a certain value in a multidimensional array? [duplicate]如何在多维数组中找到某个值的键? [复制]
【发布时间】:2014-11-19 09:27:36
【问题描述】:

我需要在多维数组中找到一个值的键

【问题讨论】:

  • 您不能遍历所有元素并检查每个元素是否与给定值相等吗?
  • 这是多维的,我什至不知道维数
  • 很棒的@SujitAgarwal 谢谢。
  • 提问前先搜索 :)

标签: php multidimensional-array


【解决方案1】:

首先,您可以使用 in_array/is_array 函数在数组中搜索值,但 in_array 不适用于多维数组,因此最好使用 foreach 循环特别是在其多维数组时搜索某些内容。这是 php 手册中的一个函数,适用于多维数组,它以递归方式工作,因此输入数组的深度无关紧要。

function myInArray($array, $value, $key){
//loop through the array
foreach ($array as $val) {
  //if $val is an array cal myInArray again with $val as array input
  if(is_array($val)){
    if(myInArray($val,$value,$key))
      return true;
  }
  //else check if the given key has $value as value
  else{
    if($array[$key]==$value)
      return true;
  }
}
return false;

}

【讨论】:

    【解决方案2】:

    您不必知道或关心有多少维度。 Adam Sinclair 答案的“搜索键”部分中的多维示例将爬取数组的整个地理,发现它的形状并忘记它完成的部分并没有产生你想要的。

    【讨论】:

      【解决方案3】:

      搜索键

      所以如果你知道值,我猜你正在寻找 $key。然后使用array_search:

      $array = array(0 => 'value1', 1 => 'value2', 2 => 'value3', 3 => 'red'); 
      $key = array_search('value2', $array); // 2
      

      如果是多维数组,使用这个函数:

      function recursive_array_search($needle,$haystack) {
          foreach($haystack as $key=>$value) {
              $current_key=$key;
              if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
                  return $current_key;
              }
          }
          return false;
      }
      

      在数组中?

      如果您想知道某个值是否在数组中,请使用函数in_array。使用上面的数组:

      if (in_array("value1", $array)) {
          echo "value1 is in the array";
      }
      

      如果是多维数组,则使用:

      function in_multiarray($elem, $array)
      {
          $top = sizeof($array) - 1;
          $bottom = 0;
          while($bottom <= $top)
          {
              if($array[$bottom] == $elem)
                  return true;
              else 
                  if(is_array($array[$bottom]))
                      if(in_multiarray($elem, ($array[$bottom])))
                          return true;
      
              $bottom++;
          }        
          return false;
      }
      

      【讨论】:

      • 这很好,但我害怕我不知道有多少维度?这是一个多维数组,不知道有多少维
      • 他提供了多维数组解决方案@MarceloNoronha
      • 很棒的答案@Adam Sinclair
      猜你喜欢
      • 2013-09-22
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多