Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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中按日期按日期降序排列数组_Php - Fatal编程技术网

php中按日期按日期降序排列数组

php中按日期按日期降序排列数组,php,Php,我有一个数组,我想按日期排序。我无法按日期降序对其进行正确排序。请帮忙 Array ( [1] => Array ( [1] => 11/05/2013 [2] => Executive Planning Day ) [2] => Array ( [1] => 13/06/2013 [2] => Middle Leaders Planning Day ) [3]

我有一个数组,我想按日期排序。我无法按日期降序对其进行正确排序。请帮忙

Array
(
[1] => Array
    (
        [1] => 11/05/2013
        [2] => Executive Planning Day
    )

[2] => Array
    (
        [1] => 13/06/2013
        [2] => Middle Leaders Planning Day
    )

[3] => Array
    (
        [1] => 12/07/2013
        [2] => New Staff Induction Day
    )

[4] => Array
    (
        [1] => 13/04/2013
        [2] => Staff Conference Day No. 1
    )

[5] => Array
    (
        [1] => 14/04/2013
        [2] => Staff Conference Day No. 2
    )

[6] => Array
    (
        [1] => 15/02/2013
        [2] => Staff Conference Day No. 3
    )

[7] => Array
    (
        [1] => 16/03/2013
        [2] => Australia Day
    )
)
像这样试试

function sortFunction( $a, $b ) {
    return strtotime($a[1]) - strtotime($b[1]);
}
usort($data, "sortFunction");   //Here You can use asort($data,"sortFunction")
$orderByDate = $my2 = array();
foreach($data as $key=>$row)
{
    $my2 = explode('/',$row[1]);
    $my_date2 = $my2[1].'/'.$my2[0].'/'.$my2[2];        
    $orderByDate[$key] = strtotime($my_date2);  
}    
array_multisort($orderByDate, SORT_DESC, $data);
或者你也可以尝试细节,比如(只是建议)

由于strotime不符合d/m/Y格式,请尝试以下操作

function sortFunction( $a, $b ) {
    return strtotime($a[1]) - strtotime($b[1]);
}
usort($data, "sortFunction");   //Here You can use asort($data,"sortFunction")
$orderByDate = $my2 = array();
foreach($data as $key=>$row)
{
    $my2 = explode('/',$row[1]);
    $my_date2 = $my2[1].'/'.$my2[0].'/'.$my2[2];        
    $orderByDate[$key] = strtotime($my_date2);  
}    
array_multisort($orderByDate, SORT_DESC, $data);

我会建立一个数组进行排序

$ordered = array();
foreach ($planning as $event) {
  $ordered[$event['date']] = $event;
}
ksort($ordered);
使用usort(使用用户定义的比较函数按值对数组排序)

使用功能:

function cmp($a, $b) {
    if ($a[1] == $b[1]) return 0;
    return (strtotime($a[1]) < strtotime($b[1])) ? 1 : -1;
}

usort($data, "cmp");
函数cmp($a,$b){
如果($a[1]=$b[1])返回0;
返回(strotime($a[1])
对这里的所有答案都不太满意,所以我想我要提到的是,如果您希望对保留键的关联数组进行排序,那么您应该使用而不是。您还可以使用库从您喜欢的任何格式解析日期,库中还包括一些标准格式的日期

uasort($array,function($a,$b){
$format='d/m/Y';
$升序=假;
$zone=新的日期时区(“UTC”);
$d1=DateTime::createFromFormat($format,$a[1],$zone)->getTimestamp();
$d2=DateTime::createFromFormat($format,$b[1],$zone)->getTimestamp();
返回$递增?($d1-$d2):($d2-$d1);
});

@Gautam3164的解决方案几乎是完美的。您需要更改日期的格式。 我想说:

1987年11月10日->1987年11月10日 1987年10月11日->1987年10月11日(
$sortdate = array(
    '17/08/2015',
    '02/01/2017',
    '05/02/2014'
);

function sortFunction($a, $b)
    {
    $datea = strtotime(str_replace('/', '-', $a));
    $dateb = strtotime(str_replace('/', '-', $b));
    if ($datea == $dateb)
        {
        return 0;
        }

    return ($datea < $dateb) ? -1 : 1;
    }

usort($sortdate, "sortFunction");
echo "<pre>";
var_dump($sortdate);
'17/08/2015', '02/01/2017', '05/02/2014' ); 函数排序函数($a,$b) { $datea=strotime(str_replace('/','-',$a)); $dateb=strtotime(str_replace('/','-',$b)); 如果($datea==$dateb) { 返回0; } 报税表($datea<$dateb)?-1:1; } usort($sortdate,“sortFunction”); 回声“; var_dump($sortdate);
我花了一个晚上研究如何为我自己的类似问题做到这一点。按关联数组中键的日期对该数组进行排序

usort和usort都需要一个排序函数,您必须将该函数作为第二个参数写入并传递。usort和uasort使用sort函数比较数组中的每个项,并将结果存储为$yourArray

<?php

function array_sort($array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}

$people = array(
    12345 => array(
        'id' => 12345,
        'first_name' => 'Joe',
        'surname' => 'Bloggs',
        'age' => 23,
        'sex' => 'm'
    ),
    12346 => array(
        'id' => 12346,
        'first_name' => 'Adam',
        'surname' => 'Smith',
        'age' => 18,
        'sex' => 'm'
    ),
    12347 => array(
        'id' => 12347,
        'first_name' => 'Amy',
        'surname' => 'Jones',
        'age' => 21,
        'sex' => 'f'
    )
);

print_r(array_sort($people, 'age', SORT_DESC)); // Sort by oldest first
print_r(array_sort($people, 'surname', SORT_ASC)); // Sort by surname

我跳到这里进行关联数组排序,并在上发现了这个惊人的函数。这个函数是非常动态的,它使用指定的键按升序和降序排序

按特定键对数组排序的简单函数。保持索引关联

//your array


$arr = array();
array_push($arr, array("11/05/2013", "Executive Planning Day"));
array_push($arr, array("13/06/2013", "Middle Leaders Planning Day"));
array_push($arr, array("12/07/2013", "New Staff Induction Day"));
array_push($arr, array("13/04/2013", "Staff Conference Day No. 1"));
array_push($arr, array("14/04/2013", "Staff Conference Day No. 2"));
array_push($arr, array("15/02/2013", "Staff Conference Day No. 3"));
array_push($arr, array("16/03/2013", "Australia Day"));


var_dump($arr);

function sortDateDesc($a, $b){  
    $strA = implode("-", array_reverse( explode("/", $a[0]) ) ); 
    $strB = implode("-", array_reverse( explode("/", $b[0]) ) ); 

    return strtotime($strB) - strtotime($strA);
}



usort($arr, "sortDateDesc");

var_dump($arr);
所以请这样做:


如果您的日期格式是固定的日/月/年,那么您需要以解析器识别的字符串格式传递它,并且年-月-日是ISO标准,如果我记得很清楚的话,它可以正常工作

“日期”-索引不存在我喜欢这个答案@这是因为在OP的数组中,日期被索引为“1”,而不是“日期”。相应地调整。@Gautam3164-没关系,只是为了澄清:-)@mkumpan-我知道,Gautam也相应地改变了:-)我喜欢的答案。我正在用它进行测试。它现在对我起作用了。;谢谢:)如果数组包含几十万个条目,或者如果两个字段具有相同的日期,这会让你耳目一新。mkumpan:因为考虑到他的结构,水合几十万条条目会更有效,对吗?我的数组没有日期索引名,那么它将如何工作??。我没有得到正确的数据。在这种情况下使用
$event[1]
可以查看此线程:在使用您的建议后获得错误的数据:数组([0]=>Array([1]=>11/05/2013[2]=>Middle leader)[1]=>Array([1]=>10/05/2013[2]=>执行计划日[3]=>阵列([1]=>2013年6月25日[2]=>新员工入职日)[4]=>阵列([1]=>2013年6月27日[2]=>第8-12年开始)[6]=>阵列([1]=>2013年6月23日[2]=>执行计划日)}我尝试了所有建议,但数据没有按正确的降序排列。使用建议后获取错误数据:数组([0]=>数组([1]=>11/05/2013[2]=>中层领导)[1]=>数组([1]=>10/05/2013[2]=>执行计划日)[3]=>数组([1]=>25/06/2013[2]=>新员工入职日)[4]=>数组([1]=>2013年6月27日[2]=>8-12年开始)[6]=>数组([1]=>2013年6月23日[2]=>Executive Planning Day)}@neerajsharma您的日期不在。您可以用
preg_match()替换它
。但是,在排序之前,只检查一次
$data
,并为每个项目添加一个时间戳,这样每个项目只进行一次转换,可能会更节省时间。对您所做的操作进行一点解释会有所帮助。
<?php

function array_sort($array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}

$people = array(
    12345 => array(
        'id' => 12345,
        'first_name' => 'Joe',
        'surname' => 'Bloggs',
        'age' => 23,
        'sex' => 'm'
    ),
    12346 => array(
        'id' => 12346,
        'first_name' => 'Adam',
        'surname' => 'Smith',
        'age' => 18,
        'sex' => 'm'
    ),
    12347 => array(
        'id' => 12347,
        'first_name' => 'Amy',
        'surname' => 'Jones',
        'age' => 21,
        'sex' => 'f'
    )
);

print_r(array_sort($people, 'age', SORT_DESC)); // Sort by oldest first
print_r(array_sort($people, 'surname', SORT_ASC)); // Sort by surname
//your array


$arr = array();
array_push($arr, array("11/05/2013", "Executive Planning Day"));
array_push($arr, array("13/06/2013", "Middle Leaders Planning Day"));
array_push($arr, array("12/07/2013", "New Staff Induction Day"));
array_push($arr, array("13/04/2013", "Staff Conference Day No. 1"));
array_push($arr, array("14/04/2013", "Staff Conference Day No. 2"));
array_push($arr, array("15/02/2013", "Staff Conference Day No. 3"));
array_push($arr, array("16/03/2013", "Australia Day"));


var_dump($arr);

function sortDateDesc($a, $b){  
    $strA = implode("-", array_reverse( explode("/", $a[0]) ) ); 
    $strB = implode("-", array_reverse( explode("/", $b[0]) ) ); 

    return strtotime($strB) - strtotime($strA);
}



usort($arr, "sortDateDesc");

var_dump($arr);