如何根据两个键值对数组键进行排序?

时间:2012-12-06 20:43:20

标签: php

假设我需要在数组中运行for循环,我需要检查键值。我想打印与不匹配的元素之前不匹配的数组元素。

因此,使用下面的数组(为了清晰起见添加了额外的值),我希望它打印如下。它需要匹配current_taglast_tag值。如果它们不匹配,则需要在其他密钥之前打印该密钥。

期望的结果

TEST2

TEST1 
TEST3 
TEST4 

阵列

array(2) {
    [0]=>
    array(3) {
        ["name"]=>
            string(3) "TEST1"
        ["current_tag"]=>
            string(13) "20121129_TEST1"
        ["last_tag"]=>
            string(13) "20121129_TEST1"
    }
    [1]=>
    array(3) {
        ["name"]=>
            string(3) "TEST2"
        ["current_tag"]=>
            string(13) "20121205_TEST2"
        ["last_tag"]=>
            string(13) "20121129_TEST2"
    }
    ...
    ...
    ...
    ...
}

1 个答案:

答案 0 :(得分:1)

我会usort使用自定义回调对数组进行排序。排序后,您只需打印每个name键。

usort($array, function($a, $b) {
    $match_a = $a['current_tag'] == $a['last_tag'];
    $match_b = $b['current_tag'] == $b['last_tag'];

    if ($match_a && $match_b) {
        return 0;
    } elseif ($match_a && !$match_b) {
        return 1;
    } elseif (!$match_a && $match_b) {
        return -1;
    }
});

array_walk($array, function($item) {
    echo $item['name'];
});

如果以错误的顺序排序,只需切换1和-1的返回值。