gpt4 book ai didi

php - 按输入字符串和位置自定义数组排序

转载 作者:行者123 更新时间:2023-12-02 03:30:50 25 4
gpt4 key购买 nike

我有一个数组。它看起来像:

$arr = [
'0' => ['id'=>9, 'q'=>'motor', 'pos'=>1],
'1' => ['id'=>10, 'q'=>'NULL', 'pos'=>0],
'2' => ['id'=>7, 'q'=>'motor', 'pos'=>2],
'3' => ['id'=>8, 'q'=>'NULL', 'pos'=>0],
'4' => ['id'=>11, 'q'=>'motor','pos'=>3],
'5' => ['id'=>11, 'q'=>'exhaust','pos'=>1]
];

如何对上面的数据进行排序,使其看起来像(如果 q='motor' 在搜索字符串内):

 $arr = [
'0' => ['id'=>9, 'q'=>'motor', 'pos'=>1],
'2' => ['id'=>7, 'q'=>'motor', 'pos'=>2],
'4' => ['id'=>11, 'q'=>'motor','pos'=>3],
'1' => ['id'=>10, 'q'=>'NULL', 'pos'=>0],
'3' => ['id'=>8, 'q'=>'NULL', 'pos'=>0],
'5' => ['id'=>11, 'q'=>'exhaust','pos'=>1]
];

所以:

function custom_sort($input_query, $arr) {
foreach($arr as $key=>$row) {
if (strpos($input_query, $row['q'])) {
... How to Sort By Pos?
}
}
}

谢谢!

已更新(问题/答案)p.s:我正在尝试使用自定义变量作为输入:$q

usort($arr, function($a, $b) use ($q) {
if ($a['q'] == $q) {
if($b['q'] == $q) {
return ($a['pos'] > $b['pos']) ? 1 : -1;
}
return -1;
}
if ($b['q'] == $q) {
return 1;
}
return 0;
});

并且该功能停止工作。我该如何解决这个问题?

最佳答案

这里有一个 usort 可以处理您的需求,包装在一个可以就地转换数组的函数中:

  1. q 键包含 $query 的项目将被放置在数组的前面。

  2. q 键包含 $query 的项目将按其 pos 值升序排序。

  3. 其他所有内容都将按其 pos 值排序。

function custom_sort($query, &$arr) {
usort($arr, function($a, $b) use ($query) {
$in_a = strpos($a['q'], $query) !== false;
$in_b = strpos($b['q'], $query) !== false;

if ($in_a && !$in_b) {
return -1;
}
if (!$in_a && $in_b) {
return 1;
}

return $a['pos'] - $b['pos'];
});
}

custom_sort("motor", $arr);

关于php - 按输入字符串和位置自定义数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51902681/

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