2017-04-14 35 views
0

我在PHPPHP多維數組中的其他陣列

這個多維數組排序,我想這樣的排序是:

Array (
[4570] => Array 
    (
     [id] => 1647 
     [date] => 2017-13 
    ) 

[4571] => Array 
    (
     [id] => 1647 
     [date] => 2017-14 
    ) 

[4573] => Array 
    (
     [id] => 1705 
     [date] => 2017-15 
    ) 

[4574] => Array 
    (
     [id] => 1705 
     [date] => 2017-15 
    ) 
) 

我想打一個這樣的數組:

Array 
(
    [2017-13] => Array 
    (
    all the ids associated with 2017-13 
) 

    [2017-14] => Array 
    (
    all the ids associated with 2017-14 
    [id] 
    [id] 
    ... 
) 
) 

可能是非常好的,如果有人可以幫助我 沒有找到它的代碼示例 謝謝

+0

請至少嘗試的東西 – Mazz

回答

1

這可能是你在找什麼:

<?php 
$input = [ 
    4570 => [ 
     'id' => 1647, 
     'date' => '2017-13' 
    ], 
    4571 => [ 
     'id' => 1647, 
     'date' => '2017-14' 
    ], 
    4573 => [ 
     'id' => 1705, 
     'date' => '2017-15' 
    ], 
    4574 => [ 
     'id' => 1705, 
     'date' => '2017-15' 
    ] 
]; 
$output = []; 

array_walk($input, function($entry) use (&$output) { 
    $output[$entry['date']][] = $entry['id']; 
}); 

print_r($output); 

以上代碼的輸出顯然是:

Array 
(
    [2017-13] => Array 
     (
      [0] => 1647 
     ) 

    [2017-14] => Array 
     (
      [0] => 1647 
     ) 

    [2017-15] => Array 
     (
      [0] => 1705 
      [1] => 1705 
     ) 

) 

如果你想防止id小號獲取添加兩次(如在關鍵2017-15的例子),您只需添加一個條件:

array_walk($input, function($entry) use (&$output) { 
    if ( ! isset($output[$entry['date']]) 
     || ! in_array($entry['id'], $output[$entry['date']])) { 
     $output[$entry['date']][] = $entry['id']; 
    } 
}); 
0

這不是一種排序。我會通過迭代當前的數組來創建一個新的數組來解決這個問題。

$t = []; 
foreach ($array as $item) { 
    if (!isset($t[$item['date']]) { 
     $t[$item['date']] = []; 
    } 
    $t[$item['date']][] = $item['id']; 
} 
0

你可以嘗試這樣的事:

<?php 

$sourceArray = array(
    array(
     'id' => 1647, 
     'date' => '2017-13' 
    ), 
    array(
     'id' => 1647, 
     'date' => '2017-13' 
    ), 
    array(
     'id' => 1647, 
     'date' => '2017-14' 
    ) 
); 

$resultArray = array(); 

foreach ($sourceArray as $k=>$v) { 
    $resultArray[$v['date']][] = $v['id']; 
} 

?>