gpt4 book ai didi

php - 根据单独数组的顺序对数组进行排序

转载 作者:搜寻专家 更新时间:2023-10-31 21:17:40 24 4
gpt4 key购买 nike

我编写的代码基于 this similar question ,但是我无法将其转换为在类中工作并且不使用全局变量

这就是我想要做的。

假设我有 2 个数组:

$headings = array(
'id' => 'ID',
'name' => 'Name',
);

$rows = array(
array(
'id' => 1,
'name' => 'Jo Blogs',
),
array(
'name' => 'John Smith',
'id' => 2,
'other' => 'Potentially other data'
),
);

我想将 $rows 排序为 $headings 中指定的顺序,并在末尾出现任何未定义的键。例如,排序后 $rows 看起来像:

$rows = array(
array(
'id' => 1,
'name' => 'Jo Blogs',
),
array(
'id' => 2,
'name' => 'John Smith',
'other' => 'Potentially other data'
),
);

在类之外工作的代码是:

$headings = array(
'id' => 'ID',
'name' => 'Name',
);

$rows = array(
array(
'id' => 1,
'name' => 'Jo Blogs',
),
array(
'name' => 'John Smith',
'id' => 2,
'other' => 'Potentially other data'
),
);

var_dump($rows);

array_walk($rows, "sort_it");

var_dump($rows);

function sort_it(&$value, $key) {
uksort($value, "cmp");
}

function cmp($a, $b) {
global $headings;

if (!isset($headings[$a]) || !isset($headings[$b]) || $headings[$a]>$headings[$b]){
return 1;
}else{
return -1;
}

}

输出:

array
0 =>
array
'id' => int 1
'name' => string 'Jo Blogs' (length=8)
1 =>
array
'name' => string 'John Smith' (length=10)
'id' => int 2
'other' => string 'Potentially other data' (length=22)
array
0 =>
array
'id' => int 1
'name' => string 'Jo Blogs' (length=8)
1 =>
array
'id' => int 2
'name' => string 'John Smith' (length=10)
'other' => string 'Potentially other data' (length=22)

这是正确的。再说一遍,我该如何摆脱对 global.我知道 array_walk($rows, array($this, "sort_it")); 将使用 $this->sort_it()。不幸的是,这必须在 PHP 5.2.14 中工作(所以从 5.3 开始就没有花哨的东西了)。

谢谢。

最佳答案

$result = fix_array_order($rows, $headings);
print_r($result);

function fix_array_order($array, $order_array)
{
$order = array_keys($order_array);

$result = array();
foreach($array as $arr)
{
$new_sub_array = array();
foreach($order as $key)
{
$new_sub_array[$key] = $arr[$key];
}

$diff = array_diff(array_keys($arr), $order);
foreach($diff as $diff_key)
{
$new_sub_array[$diff_key] = $arr[$key];
}
$result[] = $new_sub_array;
}
return $result;
}

关于php - 根据单独数组的顺序对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116743/

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