2017-04-05 122 views
0

我使用var_dump($ fields)来输出下面的PHP数组;将具有匹配键值的数组移动到新的分组数组

array() { 
    [ 0 ] => array() { 
     [ "state" ] => string(3) "nsw" 
     [ "address" ] => string(13) "8 Test Street" 
     [ "phone" ] => string(12) "0000 000 000" 
     [ "email" ] => string(15) "[email protected]" 
    } 
    [ 1 ] => array() { 
     [ "state" ] => string(2) "wa" 
     [ "address" ] => string(13) "5 Test Street" 
     [ "phone" ] => string(12) "0000 000 000" 
     [ "email" ] => string(15) "[email protected]" 
    } 
    [ 2 ] => array() { 
     [ "state" ] => string(3) "qld" 
     [ "address" ] => string(13) "3 Test Street" 
     [ "phone" ] => string(12) "0000 000 000" 
     [ "email" ] => string(15) "[email protected]" 
    } 
    [ 3 ] => array() { 
     [ "state" ] => string(3) "nsw" 
     [ "address" ] => string(13) "1 Test Street" 
     [ "phone" ] => string(12) "0000 000 000" 
     [ "email" ] => string(15) "[email protected]" 
    } 
} 

我想从所有的“状态”键创建新阵列呈现在$字段和对应的值以上,从而其像下面移动。

array() { 
    [ "nsw" ] => array() { 
     [0] => array() { 
      [ "address" ] => string(13) "8 Test Street" 
      [ "phone" ] => string(12) "0000 000 000" 
      [ "email" ] => string(15) "[email protected]" 
     } 
     [1] => array() { 
      [ "address" ] => string(13) "1 Test Street" 
      [ "phone" ] => string(12) "0000 000 000" 
      [ "email" ] => string(15) "[email protected]" 
     } 
    } 
    [ "wa" ] => array() { 
     [0] => array() { 
      [ "address" ] => string(13) "5 Test Street" 
      [ "phone" ] => string(12) "0000 000 000" 
      [ "email" ] => string(15) "[email protected]" 
     } 
    } 
    [ "qld" ] => array() { 
     [0] => array() { 
      [ "address" ] => string(13) "3 Test Street" 
      [ "phone" ] => string(12) "0000 000 000" 
      [ "email" ] => string(15) "[email protected]" 
     } 
    } 
} 

任何人都可以请大家帮忙,一直在寻找这个答案没有运气。

谢谢!

回答

1

只是一点点逻辑。

<?php 

$fields = [ 
    [ 
     "state" => "nsw", 
     "address" => "8 Test Street", 
     "phone" => "0000 000 000", 
     "email" => "[email protected]", 
    ], 
    [ 
     "state" => "wa", 
     "address" => "5 Test Street", 
     "phone" => "0000 000 000", 
     "email" => "[email protected]", 
    ], 
    [ 
     "state" => "qld", 
     "address" => "3 Test Street", 
     "phone" => "0000 000 000", 
     "email" => "[email protected]", 
    ], 
    [ 
     "state" => "nsw", 
     "address" => "1 Test Street", 
     "phone" => "0000 000 000", 
     "email" => "[email protected]", 
    ] 
]; 

$new = []; 
foreach ($fields as $field) { 
    $state = $field['state']; 
    unset($field['state']); 
    $new[$state][] = $field; 
} 

print_r($new); 

Array 
(
    [nsw] => Array 
     (
      [0] => Array 
       (
        [address] => 8 Test Street 
        [phone] => 0000 000 000 
        [email] => [email protected] 
       ) 

      [1] => Array 
       (
        [address] => 1 Test Street 
        [phone] => 0000 000 000 
        [email] => [email protected] 
       ) 

     ) 

    [wa] => Array 
     (
      [0] => Array 
       (
        [address] => 5 Test Street 
        [phone] => 0000 000 000 
        [email] => [email protected] 
       ) 

     ) 

    [qld] => Array 
     (
      [0] => Array 
       (
        [address] => 3 Test Street 
        [phone] => 0000 000 000 
        [email] => [email protected] 
       ) 

     ) 

) 
+0

谢谢亚历山大!非常感激。 –

0

这应该干净利落。

$grouped = array_reduce($addresses, function ($grouped, $address) { 
    return array_merge_recursive($grouped, [ 
     $address['state'] => [ $address ], 
    ]); 
}, []);