我有两个数组,第一个是月数组第二个是结果数组,
$ monthArray = array(“2018年1月,2018年2月”,“2018年3月”);
需要按月的顺序对以下数组进行排序
$result =
array(
array(
"day" => "Feb 2018",
"value" => "101"
),
array(
"day" => "Jan 2018",
"value" => "18"
),
array(
"day" => "Mar 2018",
"value" => "0"
)
我必须按月顺序对结果数组进行排序,如下面的输出
Array
(
[0] => Array
(
[day] => Jan 2018
[value] => 18
)
[1] => Array
(
[day] => Feb 2018
[value] => 101
)
[2] => Array
(
[day] => Mar 2018
[value] => 0
)
)
我正在尝试使用sort,usort,ksort php函数,但它无法正常工作。
答案 0 :(得分:0)
试试这个,
$result =
[
[
"day" => "Feb 2018",
"value" => "101",
],
[
"day" => "Jan 2018",
"value" => "18",
],
[
"day" => "Mar 2018",
"value" => "0",
],
];
usort($result, function($a, $b) {
return new DateTime($a['day']) <=> new DateTime($b['day']);
});
usort - 使用用户定义的比较函数按值对数组进行排序
以下是demo。
参考link。
答案 1 :(得分:0)
如果您想按时间顺序排序,则不需要$monthArray
变量。您可以使用strtotime()
从月 - 年值生成时间戳,并对这些时间戳升序进行排序。您可以使用太空船操作员(<=>
)比较排序调用中的值,或者如果您的php版本较旧,则可以使用减法。
代码:(Demo)
$result =[
["day" => "Feb 2018", "value" => "101"],
["day" => "Jan 2018", "value" => "18"],
["day" => "Mar 2018", "value" => "0"]
];
usort($result,function($a,$b){return strtotime($a['day'])-strtotime($b['day']);});
var_export($result);
输出:
array (
0 =>
array (
'day' => 'Jan 2018',
'value' => '18',
),
1 =>
array (
'day' => 'Feb 2018',
'value' => '101',
),
2 =>
array (
'day' => 'Mar 2018',
'value' => '0',
),
)
如果您的分类月 - 年变量可以包含非按时间顺序排序,那么您可以使用array_replace()
。
$monthArray
以使值成为键。array_column()
第二个参数调用null
,以便使用第3个参数指定的列数据为数组分配键。$monthArray
值。array_values()
重新索引数组。不同的代码,相同的结果:
$monthArray = ["Jan 2018","Feb 2018","Mar 2018"];
$result =[
["day" => "Feb 2018", "value" => "101"],
["day" => "Jan 2018", "value" => "18"],
["day" => "Mar 2018", "value" => "0"]
];
$result = array_values(array_replace(array_flip($monthArray),array_column($result,null,'day')));
var_export($result);
根据输入数据的大小,每次迭代调用两次usort()
时,这可能会比array_search()
更快,也可能不会更快。无论哪种方式,最终用户都无法察觉速度差异。