如何按名称将数组分组到子数组


How to group array to subarray by name

我有一个格式数组

array
(
     0 => array ( id = 1, name = chimpanzee, address = Singapore )
     1 => array ( id = 2, name = meeting, address = USA  )
     2 => array ( id = 3, name = dynasty, address = Singapore  )
     3 => array ( id = 4, name = chocolate, address = Netherland  )
     4 => array ( id = 5, name = bananas, address = Singapore  )
     5 => array ( id = 6, name = fantasy, address = USA  )
     6 => array ( id = 7, name = football, address = England)
)

我想根据每个子数组中的地址字段将其分组到一个新数组中。

array
(
    Singapore => array
    (
         0 => array ( id = 1, name = chimpanzee, address = Singapore )
         2 => array ( id = 3, name = dynasty, address = Singapore  )
         4 => array ( id = 5, name = bananas, address = Singapore  )
    )
    USA => array
    (
         1 => array ( id = 2, name = meeting, address = USA  )
         5 => array ( id = 6, name = fantasy, address = USA  )
    )
    Netherland => array
    (
         3 => array ( id = 4, name = chocolate, address = Netherland  )
    )
    England => array
    (
         6 => array ( id = 7, name = football, address = England)
    )
)

正如@Rizier123所说,使用循环检查所有数组条目并将它们复制到一个新的(排序的)数组中,如下所示:

$source_array = array(
    array( 'id' => 1, 'name' => 'chimpanzee', 'address' = 'Singapore' ),
    array( 'id' => 2, 'name' => 'meeting', 'address' = 'USA'  ),
    array( 'id' => 3, 'name' => 'dynasty', 'address' = 'Singapore'  ),
    array( 'id' => 4, 'name' => 'chocolate', 'address' = 'Netherland'  ),
    array( 'id' => 5, 'name' => 'bananas', 'address' = 'Singapore'  ),
    array( 'id' => 6, 'name' => 'fantasy', 'address' = 'USA'  ),
    array( 'id' => 7, 'name' => 'football', 'address' = 'England'),
);
$sorted_array = array();
foreach ( $source_array as $idx => $entry ) {
    // Check if country already has a array
    if ( ! isset( $sorted_array[ $entry['address'] ] ) ) {
        $sorted_array[ $entry['address'] ] = array();
    }
    $sorted_array[ $entry['address'] ][ $idx ] = $entry;
}