【问题标题】:How to get all array keys with same value如何获取具有相同值的所有数组键
【发布时间】:2025-12-14 05:45:01
【问题描述】:

我几乎尝试了所有方法,阅读了整个 php.net,但我似乎无法找到一种方法来获取具有相同值的所有键的数组。

例如这是数组:

Array
(
   [869] => 87
   [938] => 89
   [870] => 127
   [871] => 127
   [940] => 127
   [942] => 123
   [947] => 123
   [949] => 75
)

我们想要的数组是:

Array
(
    [1] => array
    (
        [1] => 870
        [2] => 871
        [3] => 940
    )
    [2] => array
    (
        [1] => 942
        [2] => 947
    )
)

【问题讨论】:

  • 自己写函数怎么样?
  • 别以为我经验不够。
  • 你知道key的最大限制吗?
  • 你确定答案吗?

标签: php arrays


【解决方案1】:

这是一个可以做你想做的事情的函数。许多可能不是最简单的,但它确实有效:

<?php

$myArray = array(
   869 => 87,
   938 => 89,
   870 => 127,
   871 => 127,
   940 => 127,
   942 => 123,
   947 => 123,
   949 => 75
);
$newArray = $foundKeys = array();
$itt = 0;
foreach($myArray as $i => $x){
    foreach($myArray as $j => $y ){
        if($i != $j && !in_array($i,$foundKeys) && $x == $y){
           if(!is_array($newArray[$itt])){
               $newArray[$itt] = array($i);
           }
           array_push($newArray[$itt],$j);
           array_push($foundKeys,$j);
        }
    }
    $itt++;
}
print_r($newArray);

结果:

Array
(
    [2] => Array
        (
            [0] => 870
            [1] => 871
            [2] => 940
        )

    [5] => Array
        (
            [0] => 942
            [1] => 947
        )

)

【讨论】:

    【解决方案2】:

    如果你的第二个数组有你正在检查的值作为它的键,这会更容易做,例如

    Array
    (
        [127] => array
        (
            [1] => 870
            [2] => 871
            [3] => 940
        )
        [123] => array
        (
            [1] => 942
            [2] => 947
        )
    )
    

    然后你可以这样做:

    <?php
    
    $output = array();
    foreach($your_array as $key => $current) {
        if( !array_key_exists($current, $output) ) {
            // create new entry
            $output[$current] = array( $key );
        } else {
            // add to existing entry
            $output[$current][] = $key;
        }
    }
    
    print_r($output);
    ?>
    

    这应该返回上面的输出...

    【讨论】:

      【解决方案3】:

      我的短代码。

      $array =Array
      (
         869 => 87,
         938 => 89,
         870 => 127,
         871 => 127,
         940 => 127,
         942 => 123,
         947 => 123,
         949 => 75
      );
      
      $return = array();
      foreach ($array as $key => $value)
          $return[$value][] = $key;
      
      var_dump(array_values($return));
      

      http://3v4l.org/scDZ4

      【讨论】:

      • 如果错误报告被启动,会抛出未定义的索引错误,否则很好;)
      • @scrowler,你确定吗?
      • 是的,为了以防万一,在使用变量之前定义变量通常是个好主意,但大多数时候您不会在实时服务器上遇到这些错误
      • 我可以看到。在将error_reporting 设置为E_ALL 的服务器上试一试
      • @scrowler,我一直与error_reporting=-1 合作。你应该自己检查一下。另请查看此示例的最后一行:php.net/manual/en/language.types.array.php#example-95
      最近更新 更多