dam*_*woo 3 php arrays sorting case-insensitive
经过多次搜索后,我无法找到关于如何使用array_multisort()对多维数组进行不敏感排序的一个很好的解释.在处理来自数据库查询的信息时,我发现这是一个非常有用的功能,所以我想我会分享.
我应该注意这只适用于php 5.4+
# Example results from database
$PDOresult = array(
array('name' => 'Alpha', 'price' => '10'),
array('name' => 'beta', 'price' => '12'),
array('name' => 'Gamma', 'price' => '14'),
array('name' => 'delta', 'price' => '16'),
array('name' => 'Epsilon', 'price' => '18'),
array('name' => 'zeta', 'price' => '20'),
...
);
# Create array of field to sort by - 'name' in this example
foreach ($PDOresult as $key => $row) {
$sort_by[$key] = $row['name'];
}
# Sort array - The flags SORT_NATURAL & SORT_FLAG_CASE are required to make the
# sorting case insensitive.
array_multisort($sort_by, SORT_ASC, SORT_NATURAL|SORT_FLAG_CASE, $PDOresult);
# Output
var_dump($PDOresult);
Run Code Online (Sandbox Code Playgroud)
如果使用php 5.5+,你可以跳过foreach()并使用array_column()代替.像这样:
$sort_by = array_column($PDOresult, 'name');
Run Code Online (Sandbox Code Playgroud)
我很想把它编辑成一个写得很好的答案:如何在PHP中对数组和数据进行排序?但是我不想搞砸格式化,所以如果有人想这样做并关闭它,那对我来说没问题.
@damndaewoo
SORT_ASC|SORT_NATURAL|SORT_FLAG_CASE
Run Code Online (Sandbox Code Playgroud)
在某些情况下会给你:
Warning: array_multisort(): Argument #2 is an unknown sort flag
Run Code Online (Sandbox Code Playgroud)
正如文档所说,您应该使用“,”而不是“|” 但你不能执行以下操作:
SORT_ASC,SORT_NATURAL,SORT_FLAG_CASE因为你会得到意想不到的:
Argument #4 is expected to be an array or sorting flag that has not already been specified
Run Code Online (Sandbox Code Playgroud)
相反,您将使用以下两种技术:
array_multisort($sort_by, SORT_ASC,SORT_NATURAL|SORT_FLAG_CASE, $PDOresult);