<i id='RqL2y'><tr id='RqL2y'><dt id='RqL2y'><q id='RqL2y'><span id='RqL2y'><b id='RqL2y'><form id='RqL2y'><ins id='RqL2y'></ins><ul id='RqL2y'></ul><sub id='RqL2y'></sub></form><legend id='RqL2y'></legend><bdo id='RqL2y'><pre id='RqL2y'><center id='RqL2y'></center></pre></bdo></b><th id='RqL2y'></th></span></q></dt></tr></i><div id='RqL2y'><tfoot id='RqL2y'></tfoot><dl id='RqL2y'><fieldset id='RqL2y'></fieldset></dl></div>
<tfoot id='RqL2y'></tfoot>

  1. <small id='RqL2y'></small><noframes id='RqL2y'>

      • <bdo id='RqL2y'></bdo><ul id='RqL2y'></ul>
    1. <legend id='RqL2y'><style id='RqL2y'><dir id='RqL2y'><q id='RqL2y'></q></dir></style></legend>

      查找所有具有相同值的数组键

      时间:2023-11-30

        <small id='jflFe'></small><noframes id='jflFe'>

        <legend id='jflFe'><style id='jflFe'><dir id='jflFe'><q id='jflFe'></q></dir></style></legend>
          <tbody id='jflFe'></tbody>
            <tfoot id='jflFe'></tfoot>
              <i id='jflFe'><tr id='jflFe'><dt id='jflFe'><q id='jflFe'><span id='jflFe'><b id='jflFe'><form id='jflFe'><ins id='jflFe'></ins><ul id='jflFe'></ul><sub id='jflFe'></sub></form><legend id='jflFe'></legend><bdo id='jflFe'><pre id='jflFe'><center id='jflFe'></center></pre></bdo></b><th id='jflFe'></th></span></q></dt></tr></i><div id='jflFe'><tfoot id='jflFe'></tfoot><dl id='jflFe'><fieldset id='jflFe'></fieldset></dl></div>
              • <bdo id='jflFe'></bdo><ul id='jflFe'></ul>
                本文介绍了查找所有具有相同值的数组键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                当值未知时,是否有更简单的方法来获取具有相同值的所有数组键.

                Is there a simpler way to get all array keys that has same value, when the value is unknown.

                array_unique问题 是它返回唯一数组,因此找不到唯一值.

                The problem with array_unique is that it returns the unique array and thus it doesn't find unique values.

                即例如从这个数组中:

                Array (
                  [a]=>1000
                  [b]=>1
                  [c]=>1000
                )
                

                我想要这个

                Array (
                  [a]=>1000
                  [c]=>1000
                )
                

                另一种解决方法是,如果我能找到 lonely 值,然后找到它们的键,然后使用 array_diff

                Another way around this is, if I could find the lonely values, and then their keys, and then use array_diff

                这是我目前得到的,看起来很糟糕:

                This is what I've got so far, looks awful:

                $a = array( 'a' => 1000, 'b' => 1, 'c' => 1000 );
                $b = array_flip( array_count_values( $a ) );
                krsort( $b );
                $final = array_keys( $a, array_shift( $b ) );
                

                更新
                使用 Paulo Freites 的答案作为代码库,我可以让它工作起来非常容易、可维护且易于使用……通过将过滤用作静态类方法,我可以通过调用 ClassName::get_duplicates($array_to_filter)

                private static $counts = null;
                
                private static function filter_duplicates ($value) {
                    return self::$counts[ $value ] > 1;
                }
                
                public static function get_duplicates ($array) {
                    self::$counts = array_count_values( $array );
                    return array_filter( $array, 'ClassName::filter_duplicates' );
                }
                

                推荐答案

                利用闭包获得更直接的解决方案:

                Taking advantage of closures for a more straightforward solution:

                $array = array('a' => 1000, 'b' => 1, 'c' => 1000);
                $counts = array_count_values($array);
                $filtered = array_filter($array, function ($value) use ($counts) {
                    return $counts[$value] > 1;
                });
                var_dump($filtered);
                

                这给了我以下信息:

                array(2) {
                  ["a"]=>
                  int(1000)
                  ["c"]=>
                  int(1000)
                }
                

                演示:https://eval.in/67526

                就是这样!:)

                更新:向后兼容的解决方案

                $array = array('a' => 1000, 'b' => 1, 'c' => 1000);
                $counts = array_count_values($array);
                $filtered = array_filter($array, create_function('$value',
                    'global $counts; return $counts[$value] > 1;'));
                var_dump($filtered);
                

                演示:https://eval.in/68255

                这篇关于查找所有具有相同值的数组键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:PHP:如何识别和更改数组中的重复值? 下一篇:从多维数组中删除重复键

                相关文章

                <small id='0xyl1'></small><noframes id='0xyl1'>

              • <tfoot id='0xyl1'></tfoot>
                  <bdo id='0xyl1'></bdo><ul id='0xyl1'></ul>

                  <i id='0xyl1'><tr id='0xyl1'><dt id='0xyl1'><q id='0xyl1'><span id='0xyl1'><b id='0xyl1'><form id='0xyl1'><ins id='0xyl1'></ins><ul id='0xyl1'></ul><sub id='0xyl1'></sub></form><legend id='0xyl1'></legend><bdo id='0xyl1'><pre id='0xyl1'><center id='0xyl1'></center></pre></bdo></b><th id='0xyl1'></th></span></q></dt></tr></i><div id='0xyl1'><tfoot id='0xyl1'></tfoot><dl id='0xyl1'><fieldset id='0xyl1'></fieldset></dl></div>

                  1. <legend id='0xyl1'><style id='0xyl1'><dir id='0xyl1'><q id='0xyl1'></q></dir></style></legend>