Php 使用usort重新排列多维数组
我有一个大数组(这只是其中的一部分): 我需要按产品创建的日期安排每一个产品。。。 我尝试过各种usort、ksort、uksort技术,但都失败了,我尝试过让它按特定的顺序(按时间顺序)排列,但失败了Php 使用usort重新排列多维数组,php,arrays,json,usort,Php,Arrays,Json,Usort,我有一个大数组(这只是其中的一部分): 我需要按产品创建的日期安排每一个产品。。。 我尝试过各种usort、ksort、uksort技术,但都失败了,我尝试过让它按特定的顺序(按时间顺序)排列,但失败了 您需要使用uasort函数,它允许您指定一个您编写的简单比较函数。有关详细信息,请参阅。您还可以将匿名函数定义为uasort调用的一部分。由于您有一个带有数组的对象,请确保将对象的数组传递给uasort函数。由于您正在对一组对象进行排序,因此比较函数应该考虑到它正在处理两个对象 基于您的回答和您
您需要使用uasort函数,它允许您指定一个您编写的简单比较函数。有关详细信息,请参阅。您还可以将匿名函数定义为uasort调用的一部分。由于您有一个带有数组的对象,请确保将对象的数组传递给uasort函数。由于您正在对一组对象进行排序,因此比较函数应该考虑到它正在处理两个对象 基于您的回答和您的var_转储:
uasort($foo[0]->products, function($a, $b) {
if ($a->created_at < $b->created_at) {
return -1;
}
return 1;
});
uasort($foo[0]->产品、功能($a、$b){
如果($a->created_at<$b->created_at){
返回-1;
}
返回1;
});
以下是一个示例:
$arr_1 = array('name' => 'A',
'date' => '2012-12-16T11:30:24+00:00' ,
'created_at' => '2012-12-16T11:30:24+00:00');
$arr_2 = array('name' => 'B',
'date' => '2012-12-16T11:30:22+00:00' ,
'created_at' => '2012-12-16T11:30:21+00:00');
$test_array = array($arr_1, $arr_2);
var_dump($test_array);
usort($test_array, function($a, $b) {
$a_date = new DateTime($a['date']);
$b_date = new DateTime($b['date']);
if ($a_date < $b_date) {
return -1;
}
return 1;
});
var_dump($test_array);
$arr\u 1=数组('name'=>'A',
“日期”=>“2012-12-16T11:30:24+00:00”,
“创建于”=>“2012-12-16T11:30:24+00:00”);
$arr_2=数组('name'=>'B',
“日期”=>“2012-12-16T11:30:22+00:00”,
“创建于”=>“2012-12-16T11:30:21+00:00”);
$test_array=array($arr_1,$arr_2);
变量转储($test\u数组);
usort($test_数组,函数($a,$b){
$a_date=新的日期时间($a['date']);
$b_date=新的日期时间($b['date']);
如果($a_日期<$b_日期){
返回-1;
}
返回1;
});
变量转储($test\u数组);
这就是我迷路的地方,我可以对单个阵列执行此操作,但深入阵列则会失败…”“我可以对单个阵列执行此操作,但深入阵列则会失败。”请在此处为我们提供一些帮助。我只看到一组物体。它恰好位于对象内部,但这不应阻止排序。我错过什么了吗?谢谢,~RayI正在与阵列中的阵列进行斗争,从第二个阵列中获取创建的_at数据,然后使用该数据组织所有产品……我更新了我的回复$在我的例子中,foo应该是你上面所说的变量。好极了!非常感谢gview,为我的描述道歉!日期格式的格式实际上可以像字符串一样进行比较,较早的日期是“较小”的字符串。不需要用DateTime解析它们。@Sven确定。我明白了,这不是他的问题所在。这是他遇到问题的多维方面。
$arr_1 = array('name' => 'A',
'date' => '2012-12-16T11:30:24+00:00' ,
'created_at' => '2012-12-16T11:30:24+00:00');
$arr_2 = array('name' => 'B',
'date' => '2012-12-16T11:30:22+00:00' ,
'created_at' => '2012-12-16T11:30:21+00:00');
$test_array = array($arr_1, $arr_2);
var_dump($test_array);
usort($test_array, function($a, $b) {
$a_date = new DateTime($a['date']);
$b_date = new DateTime($b['date']);
if ($a_date < $b_date) {
return -1;
}
return 1;
});
var_dump($test_array);