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

二维数组按值排序

WBOY
WBOYOriginal
2016-06-06 20:11:201279browse

<code>//排序前
$arr = array(
    0 => array('id' => 'C160001-12'),
    1 => array('id' => 'C160001-10'),
    2 => array('id' => 'C160001-11'),
    3 => array('id' => 'C160001-4'),
    4 => array('id' => 'C160001-6'),
    5 => array('id' => 'C160001-3'),
    6 => array('id' => 'C160001-2'),
    7 => array('id' => 'C160001-5'),
    8 => array('id' => 'C160001-0'),
    9 => array('id' => 'C160001-8'),
    10 => array('id' => 'C160001-1'),
    11 => array('id' => 'C160001-9'),
    12 => array('id' => 'C160001-7'),
    );</code>
<code>//排序后
$arr = array(
    0 => array('id' => 'C160001-0'),
    1 => array('id' => 'C160001-1'),
    2 => array('id' => 'C160001-2'),
    3 => array('id' => 'C160001-3'),
    4 => array('id' => 'C160001-4'),
    5 => array('id' => 'C160001-5'),
    6 => array('id' => 'C160001-6'),
    7 => array('id' => 'C160001-7'),
    8 => array('id' => 'C160001-8'),
    9 => array('id' => 'C160001-9'),
    10 => array('id' => 'C160001-10'),
    11 => array('id' => 'C160001-11'),
    12 => array('id' => 'C160001-12'),
    );</code>

求大神解答排序算法!
---------------------------------------华丽的分割线------------------------------------------
虽然楼下给出了答案,但是本人的另一位朋友又给出了一种更简便直观的方法,如下:

<code>usort($statementsample,function($a,$b){
    return (int)substr($a['id'],8)>(int)substr($b['id'],8);
            });</code>

回复内容:

<code>//排序前
$arr = array(
    0 => array('id' => 'C160001-12'),
    1 => array('id' => 'C160001-10'),
    2 => array('id' => 'C160001-11'),
    3 => array('id' => 'C160001-4'),
    4 => array('id' => 'C160001-6'),
    5 => array('id' => 'C160001-3'),
    6 => array('id' => 'C160001-2'),
    7 => array('id' => 'C160001-5'),
    8 => array('id' => 'C160001-0'),
    9 => array('id' => 'C160001-8'),
    10 => array('id' => 'C160001-1'),
    11 => array('id' => 'C160001-9'),
    12 => array('id' => 'C160001-7'),
    );</code>
<code>//排序后
$arr = array(
    0 => array('id' => 'C160001-0'),
    1 => array('id' => 'C160001-1'),
    2 => array('id' => 'C160001-2'),
    3 => array('id' => 'C160001-3'),
    4 => array('id' => 'C160001-4'),
    5 => array('id' => 'C160001-5'),
    6 => array('id' => 'C160001-6'),
    7 => array('id' => 'C160001-7'),
    8 => array('id' => 'C160001-8'),
    9 => array('id' => 'C160001-9'),
    10 => array('id' => 'C160001-10'),
    11 => array('id' => 'C160001-11'),
    12 => array('id' => 'C160001-12'),
    );</code>

求大神解答排序算法!
---------------------------------------华丽的分割线------------------------------------------
虽然楼下给出了答案,但是本人的另一位朋友又给出了一种更简便直观的方法,如下:

<code>usort($statementsample,function($a,$b){
    return (int)substr($a['id'],8)>(int)substr($b['id'],8);
            });</code>

<code>function my_sort($a,$b)
{
    $a = explode('-',$a['id'])[1];
    $b = explode('-',$b['id'])[1];
    if ($a==$b) return 0;
    return ($a</code>

使用usort 方法比较灵活。

array_multisort() 函数 示例如下

<code>$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

$type = array();
foreach ($data as $key => $value) {
    $type[] = $value['edition'];
}
array_multisort($type, SORT_ASC, $data);
var_dump($data);</code>
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