2017-08-23 26 views
0

我有一个数组Usort通过重复排序多维数组值

[0] => ['name' => John, city => NY, street => WallStreet ..some anouther fields] 
[1] => ['name' => Bill, city => FI, street => smstr.. some anouther fields] 
[2] => ['name' => John, city => NY, street => WallStreet ..some anouther fields] 
[3] => ['name' => Bill, city => FI, street => smstr ..some anouther fields] 
[4] => ['name' => 4, city => 4, street => 4 ..some anouther fields] 

我需要对它进行排序,以让所有重复名称的城市和街道的字段是在阵列的顶部或只是在顺序

我想

[] => ['name' => John, city => NY, street => WallStreet..some anouther fields] 
[] => ['name' => John, city => NY, street => WallStreet ..some anouther fields] 
[] => ['name' => Bill, city => FI, street => smstr ..some anouther fields] 
[] => ['name' => Bill, city => FI, street => smstr ..some anouther fields] 
[] => ['name' => 4, city => 4, street => 4 ..some anouther fields] 

我想usort

usort($sorted, function($a, $b) { 
      if ($a['name'] == $b['name'] && 
       $a['city'] == $b['city'] && 
       $a['street'] == $b['street'] 
      ){ 
       return 1; 
      } 
      else { 
       return -1; 
      } 
     }); 
使用

但它不适用于PHP 5.3,任何人都可以提出解决方案吗?

P/S,我用PHP 5.3的工作:(

+0

你是什么你想预期的结果?粘贴在你的问题 –

+0

什么定义了重复?它是否必须是名称和城市和街道的复制品,或者是任何这些复制品的复制品? “你在数组顶部还是按顺序”是什么意思? –

+0

请尝试包括一个稍大的输入示例,以及您试图获得的输出示例,并清楚说明_why_应该是输出。 –

回答

2

可以映射到一个数组内爆的价值观,那种下降,并通过该数组排序原文:

array_multisort(array_map(function($v) { 
           return implode('-', $v); 
          }, $array), 
       SORT_DESC, $array); 

为了打破它和理解件:

// Build an array of the values in each sub array 
// John-NY-WallStreet 
$sorter = array_map(function($v) { return implode('-', $v); }, $array); 
print_r($sorter); 
// Sort that descending sorting the original array the same 
array_multisort($sorter, SORT_DESC, $array); 

这将为所有在数组中元素的工作,无论什么原因,你只需要namecity和01。,然后更换return有:

return $v['name'].'-'.$v['city'].'-'.$v['street']; 
+0

哇,它的工作,我需要时间了解你是如何做到的)谢谢 – bxN5

+1

谢谢,添加了一些说明 – AbraCadaver