PHP在数组中通过匹配键

问题描述 投票:0回答:2
[array1] => Array ( [23456] => Array ( [id] => 1 [info] => info ) [78933] => Array ( [id] => 1 [info] => info ) )

等等....

[orderarray] => Array ( [0] => Array ( [id] => 78933 ) [1] => Array ( [id] => 23456 ) )
我想按订单array id的值重新排序array1键。

因此,第一个键应为78933,而不像Array1 23456中的第一个键。 有人知道如何继续吗?

我知道要读取Array1的键。

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

那么,我如何以最好的方式合并两个呢? 非常感谢!

您可以使用
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); ?>
php arrays sorting key matching
2个回答
2
投票

从订单array中创建映射数组,其中ID值成为键,并且从原始索引中绘制值。  然后按照查找/映射数组中的相关值对主数组进行排序。 demo

foreach ($orderarray as $map[$id] => ['id' => $id]);
uksort($array, fn($a, $b) => $map[$a] <=> $map[$b]);
var_export($array);

1
投票
$array

中发现的所有值都在$orderarray中找到。 它还假设

$array
可能不包含
$orderarray

中发现的所有ID,因为如果两个数组始终且仅包含相关数据,那么只能迭代

$orderarray
并在该数据上执行关键搜索会更简单
$array
.
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.