2015-10-13 80 views
1

我有一個多維數組,我很難對特定需求進行分組和排序。這裏是數組:組織或分組來自多維數組的數據

Array ( 
    [0] => Array ( 
     [0] => Joe Smith 
     [1] => Array ( 
      [0] => 3 
      [1] => 9 
     ) 
    ) 
    [1] => Array ( 
     [0] => John Doe 
     [1] => Array ( 
      [0] => 6 
      [1] => 12 
     ) 
    ) 
    [2] => Array ( 
     [0] => Jack Frost 
     [1] => Array ( 
      [0] => 2 
      [1] => 4 
     ) 
    ) 
) 

我想要做的排序是從最小的數字到最短(即2,3,4,6,9,12),而且還保持與這些號碼相關聯的名字。例如:

2 (Jack Frost), 
3 (Joe Smith), 
4 (Jack Frost), 
6 (John Doe), 
9 (Joe Smith), 
12 (John Doe) 

任何想法如何按數字進行排序並將名稱保存在一起?由於

更新1

這裏是PHP代碼中,我使用,以列出的數字:

$users = get_users(); 

$names = array(); 
$days = array(); 

foreach($users as $user) { 
    $names[] = $user->display_name; 
    $days[] = $user->member_day; 
} 

$result = array_map(null, $names, $days); 

$mdays = array(); 
foreach($days as $d) { 
    foreach($d as $d2) { 
     $mdays[] = $d2; 
    } 
} 

for($i; $i<=31; $i++) { 
    if(in_array($i, $mdays)) { 
     echo $i . '<br>'; 
    } 
} 

在上面的代碼,$result打印出上述陣列。此外,for循環將「天」排序。

最終目標是有31個塊,並用名稱填充數字塊。

回答

0

你可以做這樣的事情作爲

$result = []; 
foreach ($arr as $key => $value) { 
    foreach ($value[1] as $v) { 
     $result[$v] = $value[0]; 
    } 
} 
ksort($result); 
print_r($result); 

輸出:

Array 
(
    [2] => Jack Frost 
    [3] => Joe Smith 
    [4] => Jack Frost 
    [6] => John Doe 
    [9] => Joe Smith 
    [12] => John Doe 
) 

注意:這將w直到沒有任何陣列包含相同的密鑰

+1

完美的工作。你可以在這裏看到結果:(http://katart.biz/ppt/testpage/)。現在我必須弄清楚這個未定義的偏移錯誤。 – katart

+0

嘗試使用'isset'無論你在哪裏調用該數組 –

+1

因爲我使用'for'循環來循環31天,所以我使用'if(isset($ roster [$ i])){$ name = $名冊[$ i]於; }'讓這個工作。謝謝您的幫助。 – katart

0

這樣的事情應該工作,並在最後你可以soert你陣列

$final_array=array(); 
foreach (array as $arr){ 
    foreach($arr as $aaa){ 
    $final_array[]=array($aaa,$arr[0]) 
    } 
}