我想按星期顺序对工作日键进行排序,如下所示:周一,周二,周三,周四,周五,周六。
给出这样的输入:
Array
(
[Thursday] => 8
[Friday] => 7
[Monday] => 9
[Tuesday] => 12
[Wednesday] => 8
[Saturday] => 17
)
我想要一个这样的结果:
Array
(
[Monday] => 9
[Tuesday] => 12
[Wednesday] => 8
[thusday] => 8
[friday] => 7
[Saturday] => 17
)
请帮助。
答案 0 :(得分:7)
以下代码不使用任何排序函数。换句话说..在此上下文中不需要排序。
<?php
//Your actual array...
$arr=Array (
'Thursday' => 8,
'Friday' => 7,
'Monday' => 9,
'Tuesday' => 12,
'Wednesday' => 8,
'Saturday' => 17
);
//This is the template array.. Changing this alters the output
$arr2=array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
//A simple loop that traverses all elements of the template...
foreach($arr2 as $v)
{
//If the value in the template exists as a key in the actual array.. (condition)
if(array_key_exists($v,$arr))
{
$arr4[$v]=$arr[$v]; //The value is assigned to the new array and the key of the actual array is assigned as a value to the new array
}
}
//prints the new array
print_r($arr4);
<强> OUTPUT :
强>
Array
(
[Monday] => 9
[Tuesday] => 12
[Wednesday] => 8
[Thursday] => 8
[Friday] => 7
[Saturday] => 17
)
答案 1 :(得分:5)
使用uksort
.以下是一种方式:
$week_order = array_flip(array('Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday'));
$data = array('Thursday' => 8, 'Friday' => 7, 'Monday' => 9, 'Tuesday' => 12,
'Wednesday' => 8, 'Saturday' => 17);
uksort($data,
function($a, $b) use ($week_order) { return $week_order[$a] - $week_order[$b]; });
print_r($data);
答案 2 :(得分:1)
有很多方法可以做到这一点,但array_merge
$d = array(
'Sunday' => '',
'Monday' => '',
'Tuesday' => '',
'Wednesday' => '',
'Thursday' => '',
'Friday' => '',
'Saturday' => '',
);
$n = array
(
'Thursday' => 8,
'Friday' => 7,
'Monday' => 9,
'Tuesday' => 12,
'Wednesday' => 8,
'Saturday' => 17,
);
var_dump(array_filter(array_merge($d,$n)));
array_filter
删除空值,为您提供:
array(6) {
["Monday"]=>
int(9)
["Tuesday"]=>
int(12)
["Wednesday"]=>
int(8)
["Thursday"]=>
int(8)
["Friday"]=>
int(7)
["Saturday"]=>
int(17)
}
没有它,你会有这个:
array(7) {
["Sunday"]=>
string(0) ""
["Monday"]=>
int(9)
["Tuesday"]=>
int(12)
["Wednesday"]=>
int(8)
["Thursday"]=>
int(8)
["Friday"]=>
int(7)
["Saturday"]=>
int(17)
}
请注意“星期日”的空值
也可以通过简单的循环完成:
$d = array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
);
$n = array (
'Thursday' => 8,
'Friday' => 7,
'Monday' => 9,
'Tuesday' => 12,
'Wednesday' => 8,
'Saturday' => 17,
);
$sorted = array();
foreach ($d as $k) {
if (isset($n[$k])) {
$sorted[$k] = $n[$k];
}
}
var_dump($sorted);