duanfu6160 2014-03-12 16:01
浏览 33

PHP - array_merge没有考虑键

I need help with php array merging

I need merge by values,

so if I have values in array 1 like this

 ( room room )  and in array values  ( room ) , merge will look like this =  ( room room ) 

But if I have

 ( room room book ) and ( book book ) merged array values will look like this  ( room room book book ) 

So lets say, merged array values will be maximum count of each element, room for example , in all arrays

Few more examples, ( book ) ( book ) ( book ) = ( book ) ( room book book ) ( library room ) = ( library room book book ) ( room room ) ( book book book ) = ( room room book book book ) (room) ( room ) ( room room room ) = ( room room room )

I tried operator + , but then

( room room ) ( book book book ) is ( room room book book ), that is not good

I tried array_merge , but then

( room ) ( room ) is ( room ) , this is okay but ( room room ) ( room ) is ( room room room ) and that is wrong

It doesnt depend on order, and keys are not imporant, it is always numeric ( [0] [1] etc. )

ARRAYS :

                [0] => Array
                    (
                        [0] => room
                        [1] => room
                    )

                [1] => Array
                    (
                        [0] => book
                        [1] => book
                        [2] => book
                        [3] => book
                    )

EXPECTED RESULT = array ( room, room, book , book , book, book )

                [0] => Array
                    (
                        [0] => room
                        [1] => room
                    )

                [1] => Array
                    (
                        [0] => room
                    )

EXPECTED RESULT = array ( room, room )

                [0] => Array
                    (
                        [0] => room
                    )

                [1] => Array
                    (
                        [0] => room


                    )

EXPECTED RESULT = array ( room )

                [0] => Array
                    (
                        [0] => room
                        [1] => room
                        [2] => book
                    )

                [1] => Array
                    (
                        [0] => room
                        [1] => book
                    )
                [2] => Array
                    (
                        [0] => room
                        [1] => room
                        [2] => room
                    )

EXPECTED RESULT = array ( room , room ,room , book )

So it is alway maximum count of each ellement, for example book in all arrays

Thank you very much,

Marek

  • 写回答

2条回答 默认 最新

  • dongnai6973 2014-03-12 16:42
    关注

    Here it is:

    function user_array_merge($arr) {
      if (func_num_args() == 1) return $arr;
      $vals = array_count_values($arr);
      $arrs = func_get_args();
      array_shift($arrs);
          foreach ($arrs as $arr2) {
            $vals2 = array_count_values($arr2);
            foreach ($vals2 as $val=>$count) {
               $vals[$val] = @max( $vals[$val], $count);
            }
          }
          $result = array();
          foreach ($vals as $val=>$count) {
             $result = array_pad($result, count($result)+$count, $val);
          }
          return $result;
        }
    

    call like:

    $res = user_array_merge(['room','room'], ['book', 'book','book','room'],['library']);
    

    result:

    var_export($res);                                                                                    
    array (
      0 => 'room',
      1 => 'room',
      2 => 'book',
      3 => 'book',
      4 => 'book',
      5 => 'library',
    )
    

    Should be quite slow on large arrays.

    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题