php通过匹配键在数组中排序数组

时间:2015-10-25 19:28:53

标签: php arrays sorting key matching

我搜索了我的相关主题,但没有找到类似的问题。

我在一个数组中有一个数组,我有一个数组,我将其定义为我的排序数组。

[array1] => Array
    (
        [23456] => Array
            (
                [id] => 1
                [info] => info
            )
        [78933] => Array
            (
                [id] => 1
                [info] => info
            )
    )

依旧......

    [orderarray] => Array
    (
        [0] => Array
            (
                [id] => 78933
            )
        [1] => Array
            (
                [id] => 23456
            )
    )

我想按照orderarray id的值重新排序array1键。

所以第一个键应该是78933而不是像array1 23456那样。 有谁知道如何继续这个?

我知道从array1读取密钥。

foreach ($array1 as $key)
{
   echo $key;
}

foreach ($orderarray as $key)
{
   foreach ($key as $id => val)
   {
      echo $val;
   }
}

那么如何将两个foreach合并在一起的最佳方式呢? 非常感谢你!

1 个答案:

答案 0 :(得分:0)

您可以使用uksort()

使用自定义键排序功能
<?php

$array = array(
   "23456" => array("id" => 1, "info" => "info"),
   "78933" => array("id" => 1, "info" => "info")
);

$orderarray = array(
    array("id" => 78933),
    array("id" => 23456)
);

function customSort($a, $b) {
    global $orderarray;
    $_a = 0; $_b = 0;
    foreach ($orderarray as $index => $order) {
        $oid = intval($order['id']);
        if ($oid == intval($a)) $_a = $index;
        if ($oid == intval($b)) $_b = $index;
    }
    if ($_a == $_b) {
        return 0;
    }
    return ($_a < $_b) ? -1 : 1;
}

uksort($array, "customSort");
print_r($array);

?>