Home >Backend Development >PHP Tutorial >PHP 对二维数组排序

PHP 对二维数组排序

WBOY
WBOYOriginal
2016-06-06 20:32:181129browse

现在有一个二维数组

<code>$arr = array(
    array('date'=>'2011-04-21','wu'=>'test'),
    array('date'=>'2014-04-21','wu'=>'good'),
    array('date'=>'2011-12-22','wu'=>'great'),
    array('date'=>'2012-05-21','wu'=>'hahah'),
    array('date'=>'2013-08-13','wu'=>'test'),
    array('date'=>'2011-04-25','wu'=>'yes'),
    array('date'=>'2014-04-14','wu'=>'no'),
);
</code>

我想将它按照里面date日期来重新排序,得到这样的新数组:

<code>$arr2 = array(
    array('date'=>'2011-04-21','wu'=>'test'),
    array('date'=>'2011-04-25','wu'=>'yes'),
    array('date'=>'2011-12-22','wu'=>'great'),
    array('date'=>'2012-05-21','wu'=>'hahah'),
    array('date'=>'2013-08-13','wu'=>'test'),
    array('date'=>'2014-04-14','wu'=>'no'),
    array('date'=>'2014-04-21','wu'=>'good'),
);
</code>

请问应该怎样做呢?

回复内容:

现在有一个二维数组

<code>$arr = array(
    array('date'=>'2011-04-21','wu'=>'test'),
    array('date'=>'2014-04-21','wu'=>'good'),
    array('date'=>'2011-12-22','wu'=>'great'),
    array('date'=>'2012-05-21','wu'=>'hahah'),
    array('date'=>'2013-08-13','wu'=>'test'),
    array('date'=>'2011-04-25','wu'=>'yes'),
    array('date'=>'2014-04-14','wu'=>'no'),
);
</code>

我想将它按照里面date日期来重新排序,得到这样的新数组:

<code>$arr2 = array(
    array('date'=>'2011-04-21','wu'=>'test'),
    array('date'=>'2011-04-25','wu'=>'yes'),
    array('date'=>'2011-12-22','wu'=>'great'),
    array('date'=>'2012-05-21','wu'=>'hahah'),
    array('date'=>'2013-08-13','wu'=>'test'),
    array('date'=>'2014-04-14','wu'=>'no'),
    array('date'=>'2014-04-21','wu'=>'good'),
);
</code>

请问应该怎样做呢?

直接上代码

<code>$tmp = array();

foreach ($arr as $a) {
    $tmp[$a['date'] . '_' . $a['wu'] . '_' . rand(1000000, 9999999)] = $a;
}

asort($tmp);

$arr = array_values($tmp);
</code>

使用 array_multisort
参考:http://cn2.php.net/array_multisort

<code>php</code><code>$sort = array(  
    'direction' => 'SORT_ASC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序  
    'field'     => 'date',       //排序字段  
);
$arrSortTmp = array();  
foreach($arr AS $uniqid => $row){  
    foreach($row AS $key=>$value){  
        $arrSortTmp[$key][$uniqid] = $value;  
    }  
}
array_multisort($arrSortTmp[$sort["field"]],constant($sort["direction"]), $arr);

var_dump($arr);
</code>

$arr = array(
array('date'=>'2011-04-21','wu'=>'test'),
array('date'=>'2014-04-21','wu'=>'good'),
array('date'=>'2011-12-22','wu'=>'great'),
array('date'=>'2012-05-21','wu'=>'hahah'),
array('date'=>'2013-08-13','wu'=>'test'),
array('date'=>'2011-04-25','wu'=>'yes'),
array('date'=>'2014-04-14','wu'=>'no'),
);

array_multisort($arr, SORT_ASC);

print_r($arr);

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn