代码之家  ›  专栏  ›  技术社区  ›  mezzomix

按共享键合并多维数组值

  •  0
  • mezzomix  · 技术社区  · 6 年前

    在PHP中使用单个数组时,我希望像like一样合并,并且能够这样做,但是在应该有2的地方,我只得到1返回值。

    下面是原始数组和新数组。

        id LIKE 'fghij' OR id LIKE 'abcde' 
    
       $orig = Array
        (
            [0] => Array
                (
                    [id] => abcde
                    [field2] => height
                    [value2] => 40 ft.
                )
    
            [1] => Array
                (
                    [id] => abcde
                    [field3] => width
                    [value3] => 10-15 ft.
                )
    
            [2] => Array
                (
                    [id] => abcde
                    [field4] => light
                    [value4] => Full - Partial
                )
    
            [3] => Array
                (
                    [id] => abcde
                    [field6] => space
                    [value6] => 5-6 ft.
                )
    
            [4] => Array
                (
                    [id] => fghij
                    [field2] => height
                    [value2] => 4-8 ft.
                )
    
            [5] => Array
                (
                    [id] => fghij
                    [field3] => width
                    [value3] => 3-4 ft.
                )
    
            [6] => Array
                (
                    [id] => fghij
                    [field4] => light
                    [value4] => Full - Partial
                )
    
            [7] => Array
                (
                    [id] => fghij
                    [field5] => season
                    [value5] => Spring
                )
    
            [8] => Array
                (
                    [id] => fghij
                    [field6] => space
                    [value6] => 4 ft.
                )
    
            [9] => Array
                (
                    [id] => fghij
                    [field19] => restricted
                    [value19] => CA, TX, LA, FL, AZ
                )
    
            [10] => Array
                (
                    [id] => abcde
                    [field19] => restricted
                    [value19] => AZ
                )
    
        )
       $new = Array
        (
            [id] => abcde
            [field2] => height
            [value2] => 4-8 ft.
            [field3] => width
            [value3] => 3-4 ft.
            [field4] => light
            [value4] => Full - Partial
            [field6] => space
            [value6] => 4 ft.
            [field5] => season
            [value5] => Spring
            [field19] => restricted
            [value19] => AZ
        )
    

    $new 是如此接近正确,但它忽略了与 fghij ,返回单个扁平数组。我希望它返回两个ID及其合并值。

    这就是我在代码方面的工作:

    $new_new = [];
    foreach($orig as $key => $value){
      if(is_array($value)){
        $new_new = array_merge($new_new, $value);
      }
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Manuel Otto    6 年前

    您需要为每个唯一的ID累积条目。

    function mergeByKey($array,$key){
        $result = [];
        foreach($array as $entry){
            $is_new = true;
            foreach($result as &$result_entry){
                if($result_entry[$key]==$entry[$key]){
                    $is_new = false;
                    $result_entry = array_merge($result_entry,$entry);
                    break;
                }
            }
            if($is_new)
                $result[] = $entry;
        }
        return $result;
    }
    
    $new_new = mergeByKey($orig,'id');
    
        2
  •  1
  •   Petya    6 年前

    也许这样对你有用?您可以为$value['id']添加附加检查。

    $new = [];
    foreach($arr as $key => $value){
      if(is_array($value)){
        if( !array_key_exists($value['id'],$new) ){
            $new[$value['id']] = [];
        }  
        $new[$value['id']] = array_merge($new[$value['id']], $value );
      }
    } 
    

    我会改变我的算法,现在它按我的预期工作。