【发布时间】:2019-04-14 02:16:51
【问题描述】:
我有以下数组,我想根据 $term = "geo" 对它进行排序,仅与 [result_title] 相关?
Array
(
[0] => Array
(
[result_title] => Agathoklis Georgiou
[result_subtext] => Active Employee
)
[1] => Array
(
[result_title] => Frixos Georgiou
[result_subtext] => Active Employee
)
[2] => Array
(
[result_title] => George Ellinas
[result_subtext] => Active Employee
)
[3] => Array
(
[result_title] => Georgi Georgiev
[result_subtext] => Active Employee
)
[4] => Array
(
[result_title] => Charalambos Georgiou
[result_subtext] => Former Employee
)
[5] => Array
(
[result_title] => Georgia Kantouna
[result_subtext] => Former Employee
)
)
期望的结果应该是:
Array
(
[0] => Array
(
[result_title] => George Ellinas
[result_subtext] => Active Employee
)
[1] => Array
(
[result_title] => Georgi Georgiev
[result_subtext] => Active Employee
)
[2] => Array
(
[result_title] => Georgia Kantouna
[result_subtext] => Former Employee
)
[3] => Array
(
[result_title] => Agathoklis Georgiou
[result_subtext] => Active Employee
)
[4] => Array
(
[result_title] => Charalambos Georgiou
[result_subtext] => Former Employee
)
[5] => Array
(
[result_title] => Frixos Georgiou
[result_subtext] => Active Employee
)
)
我尝试了各种方法,例如:
usort($data, function($a, $b) use ($term) {
$x = strpos($a["result_title"], $term) === false;
$y = strpos($b["result_title"], $term) === false;
if ($x && !$y) return 1;
if ($y && !$x) return -1;
// use this if you want to sort alphabetically after the keyword sort:
return strcmp($a["result_title"], $b["result_title"]);
// or if you only want to sort by whether or not the keyword was found:
return 0;
});
和
usort($data, function ($a, $b) use ($term) {
similar_text($term, $a["result_title"], $percentA);
similar_text($term, $b["result_title"], $percentB);
return $percentA === $percentB ? 0 : ($percentA > $percentB ? -1 : 1);
});
和
usort($data, function ($a, $b) use ($term) {
$levA = levenshtein($term, $a["result_title"]);
$levB = levenshtein($term, $b["result_title"]);
return $levA === $levB ? 0 : ($levA > $levB ? 1 : -1);
});
和
usort($data, function($a, $b){ return $a["result_title"] - $b["result_title"]; });
还有更多没有任何适当的结果。或者我可能无法理解达到我的结果的方法?
我还检查了:php sorting an array based on a string 和 How to sort an array by similarity in relation to an inputted word.,但答案给了我正在寻找的结果。
【问题讨论】:
-
你能提供你的源数组作为 PHP 代码吗?
-
@MarcinOrlowski 你的意思是数组最初是如何形成的?
-
它来自哪里并不重要。将其放入有效的 PHP 数组中,这样我就可以尝试不浪费时间自己将这些数据转换为代码 :)
-
数组 ( [0] => 数组 ( [result_title] => Agathoklis Georgiou [result_subtext] => 在职员工 ) [1] => 数组 ( [result_title] => Frixos Georgiou [result_subtext] = > 活跃员工 ) [2] => 数组 ( [result_title] => George Ellinas [result_subtext] => 活跃员工 ) [3] => 数组 ( [result_title] => Georgi Georgiev [result_subtext] => 活跃员工 ) [4 ] => 数组([result_title] => Charalambos Georgiou [result_subtext] => 前雇员))
-
@MarcinOrlowski 我希望这就是你的意思:S
标签: php arrays sorting multidimensional-array