2015-10-13 83 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]) 
    } 
}