如何根据PHP中的线性数组对关联数组进行排序?

时间:2015-10-14 16:01:10

标签: php arrays

我有两个数组,一个是线性数组,表示将按照排序的排序列表,另一个是将要排序的关联数组。

此处,$recommended_props是排序列表,$prop_array是我想要排序的关联,具体取决于排序列表。排序列表指示属性代码,我想根据此代码索引对数组进行排序。

我的阵列

//Sorted list of property codes
$recommended_props = [29822, 24785, 45875, 45872];

//Property details and this array will be sorted
$prop_array = [
    [
        'code' => 24785,
        'price' => 120,
        'currency' => 'USD',
    ],
    [
        'code' => 29822,
        'price' => 150,
        'currency' => 'USD',
    ],
    [
        'code' => 45872,
        'price' => 300,
        'currency' => 'USD',
    ],
    [
        'code' => 45875,
        'price' => 250,
        'currency' => 'USD',
    ],
];

我想要的输出是:

Array
(
    [0] => Array
        (
            [code] => 29822
            [price] => 150
            [currency] => USD
        )

    [1] => Array
        (
            [code] => 24785
            [price] => 120
            [currency] => USD
        )

    [2] => Array
        (
            [code] => 45875
            [price] => 250
            [currency] => USD
        )

    [3] => Array
        (
            [code] => 45872
            [price] => 300
            [currency] => USD
        )

    )

我使用循环完成了这项任务,但我的好奇心是知道有没有简单的方法来完成这项工作?

我使用的代码:

$sorted_prop = [];
foreach($recommended_props as $code){
    foreach($prop_array as $key=>$property){
        if($property['code'] == $code){
            $sorted_prop[] = $property;
            unset($prop_array[$key]);
            break;
        }
    }
}

任何建议将不胜感激。谢谢大家。

2 个答案:

答案 0 :(得分:1)

usort()是要使用的功能:

$recommended_props = [29822, 24785, 45875, 45872];

$prop_array = [
    [
        'code' => 24785,
        'price' => 120,
        'currency' => 'USD',
    ],
    [
        'code' => 29822,
        'price' => 150,
        'currency' => 'USD',
    ],
    [
        'code' => 45872,
        'price' => 300,
        'currency' => 'USD',
    ],
    [
        'code' => 45875,
        'price' => 250,
        'currency' => 'USD',
    ],
];

usort(
    $prop_array, 
    function($a, $b) use ($recommended_props) {
        return (array_search($a['code'], $recommended_props) < array_search($b['code'], $recommended_props)) ? -1 : 1;

    }
);

var_dump($prop_array);

您可以更有效地翻转$recommended_props,并通过回调中的密钥使用它进行访问

答案 1 :(得分:0)

usort就是您所需要的!

$recommended_props = [29822, 24785, 45875, 45872];

usort($prop_array, function($a, $b) use $recommended_props {
  return strpos($recommended_props, $a['code']) > strpos($recommended_props, $b['code']);
});

代码尚未经过测试,但它应该让您对如何继续进行操作。 (请注意,您可能还需要处理代码不在$ recommended_props数组中的情况