Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用usort重新排列多维数组_Php_Arrays_Json_Usort - Fatal编程技术网

Php 使用usort重新排列多维数组

Php 使用usort重新排列多维数组,php,arrays,json,usort,Php,Arrays,Json,Usort,我有一个大数组(这只是其中的一部分): 我需要按产品创建的日期安排每一个产品。。。 我尝试过各种usort、ksort、uksort技术,但都失败了,我尝试过让它按特定的顺序(按时间顺序)排列,但失败了 您需要使用uasort函数,它允许您指定一个您编写的简单比较函数。有关详细信息,请参阅。您还可以将匿名函数定义为uasort调用的一部分。由于您有一个带有数组的对象,请确保将对象的数组传递给uasort函数。由于您正在对一组对象进行排序,因此比较函数应该考虑到它正在处理两个对象 基于您的回答和您

我有一个大数组(这只是其中的一部分):

我需要按产品创建的日期安排每一个产品。。。 我尝试过各种usort、ksort、uksort技术,但都失败了,我尝试过让它按特定的顺序(按时间顺序)排列,但失败了


您需要使用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);