gpt4 book ai didi

PHP - 根据另一个数组的元素对数组元素进行排序 :)

转载 作者:可可西里 更新时间:2023-10-31 22:59:42 26 4
gpt4 key购买 nike

所以我有两个数组。其中之一看起来像这样(它的值或元素的数量可以改变):

array('4dec' , 'def3', 'a3d6', 'd12f');

和另一个:

array(array('id' => 'd12f', 'name' => 'John'),
array('id' => 'a5f1', 'name' => 'Kathy'),
array('id' => 'def3', 'name' => 'Jane'),
array('id' => 'a3d6', 'name' => 'Amy'),
array('id' => '4dec', 'name' => 'Mary'),
array('id' => 'ecc2', 'name' => 'Fred'));

(这个不应该改变,元素和值每次都是一样的)。

注意第一个有一些来自第二个的元素。如何根据第一个数组中的元素对第二个数组进行排序?

所以基本上,在这种情况下,第二个数组应该变成:

array(array('id' => '4dec', 'name' => 'Mary'),
array('id' => 'def3', 'name' => 'Jane'),
array('id' => 'a3d6', 'name' => 'Amy'),
array('id' => 'd12f', 'name' => 'John'),
array('id' => 'a5f1', 'name' => 'Kathy'),
array('id' => 'ecc2', 'name' => 'Fred'));

(存在于第一个的元素被移动到顶部,与第一个的顺序相同,其他的保持不变)。

最佳答案

稳定性是一个转折点,因为 PHP 不再遵守这一点,但是一些额外的工作可以保持排序的稳定性。

$order_by = array('4dec' , 'def3', 'a3d6', 'd12f');

$data = array(array('id' => 'd12f', 'name' => 'John'),
array('id' => 'a5f1', 'name' => 'Kathy'),
array('id' => 'def3', 'name' => 'Jane'),
array('id' => 'a3d6', 'name' => 'Amy'),
array('id' => '4dec', 'name' => 'Mary'),
array('id' => 'ecc2', 'name' => 'Fred'));

// create a lookup table for sorted order to avoid repeated searches
$order_index = array_flip($order_by);

// create a lookup table for original order: in PHP 4.1.0 usort became unstable
// http://www.php.net/manual/en/function.usort.php
$orig_order_by = array_map(function($a){return $a['id'];}, $data);
$orig_index = array_flip($orig_order_by);

// sort values by specified order, with stability
$compare = function($a, $b) use (&$order_index, &$orig_index) {
$aid = $a['id'];
$bid = $b['id'];

$ai = $order_index[$aid];
$bi = $order_index[$bid];

if ($ai === null and $bi === null) { // original sort order for stability
return $orig_index[$aid] - $orig_index[$bid];
}
if ($ai === null) { return 1; }
if ($bi === null) { return -1; }

return $ai - $bi;
};
usort($data, $compare);
var_dump($data);

关于PHP - 根据另一个数组的元素对数组元素进行排序 :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com