2010-11-15 111 views
0

想知道是否有人可以提供帮助;在PHP中对2维数组排序

我有一个二维数组,我需要通过任何常见的“作业编号”元素进行分组; 下面是一个例子 - 我只是在玩这个想法,$ i只是一个迭代数组结果的计数器;

$galleryItems[$i][0] = 'example title';//the title 
$galleryItems[$i][1] = 'example description';//description 
$galleryItems[$i][2] = 'the client';//client 
$galleryItems[$i][3] = '00000';//job number 

关于如何分组这些toegther,例如,因此,如果有一定数量的00000工作项目将继续坚持所有这些toegther,任何00001将组合在一起等

感谢任何想法

回答

0
$galleryItemsGrouped = array(); 
foreach($galleryItems as $k => $v) { 
    $galleryItemsGrouped[$v[3]][] = $v; 
} 
var_dump($galleryItemsGrouped); 

或者也许这就是你的意思

usort($galleryItems, function($a,$b) { 
    if($a[3] == $b[3]) return 0; 
    return $a[3]<$b[3] ? -1 : 1; 
}); 
var_dump($galleryItems); 
+0

嗨,感谢 - 第一次带回结果分组,但我认为第二个看起来像我之后(保持galleryitems数组的深度相同),但我得到一个意想不到的T_FUNCTION,当我尝试并且玩弄它,欢呼 – frazzle 2010-11-15 11:37:35

+0

道歉,我认为第一个更多的是因为工作号码存储为字符串,并且不需要按照数字顺序,他们只需要将它们分组即可。如果我理解正确,第二个会按照这个数字顺序列出? – frazzle 2010-11-15 11:51:19

+0

第二个将使用PHP 5.3+。在PHP 5.2中,您需要创建一个变量函数或一个回调函数,而不是传递匿名函数。有关示例,请参阅usort()的手册,您应该可以重写它。第二个也会比较字符串,但结果数据结构会有所不同。 – Mchl 2010-11-15 12:07:25

0

粘在一起,你必须使用PHP的

如果此数据来自数据库,你可以:在$ galleryItems [$ i]

0

我想你可能不得不写,你可以用usort()使用一个排序回调函数功能想看看在那里使用GROUP BY子句,并省去在服务器上排序的麻烦。

在更具设计意义的层面上,可能考虑一组galleryItem对象而不是2D数组。

+0

嗨,我尝试了group by选项,但是我发现它有点棘手,因为我从一些wordpress插件表中拉出来,我发现我无法将我的SQL语句放入一个语句中。我可以再次看到这条路,但之前我没有取得太多成功。 – frazzle 2010-11-15 11:53:30

0

取而代之的数量指标,使用的名称:

$galleryItems[$i]['title'] = 'example title';//the title 
$galleryItems[$i]['description'] = 'example description';//description 
$galleryItems[$i]['client'] = 'the client';//client 
$galleryItems[$i]['job_number'] = '00000';//job number 

然后你就可以利用这个功能进行排序:

function sort_by_job_number ($a, $b) 
{ 
    if ($a['job_number'] == $b['job_number']) { 
     return 0; 
    }  

    return ($a['job_number'] > $b['job_number']) ? 1 : -1; 
} 

usort($ galleryItems, 'sort_by_job_number');