php 通过匹配键对数组中的数组进行排序
php sort array within array by matching keys
我搜索了我的相关主题,但没有找到类似的问题。
我有一个数组中的数组,我有一个数组定义为我的排序数组。
[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 合并在一起?
非常感谢!
您可以使用自定义键排序函数 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);
?>
我搜索了我的相关主题,但没有找到类似的问题。
我有一个数组中的数组,我有一个数组定义为我的排序数组。
[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 合并在一起? 非常感谢!
您可以使用自定义键排序函数 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);
?>