我是 PHP 新手,我不确定为什么我的代码没有输出。我已将一切就位,没有错误,一切看起来都是正确的。我尝试按升序输出名称和日期,同时使用 print_r() 验证顺序。我希望对此事有一些指导,因为我不知道我哪里出了问题。
$win = array('Name'=>
array('Jane Doe ', 'Nash Patel ', 'Joe Public '),
'Date'=>
array('7 October 2015 ', '14 October 2014 ', '12 October 2016 '));
foreach($win as $element => $namedate) {
echo '<strong>' . $element . '</strong><br>';
foreach($namedate as $both) {
echo $both . '<br/>';
}
}
foreach($win as $c=>$key) {
$sort_date[] = $key['Date'];
$sort_name[] = $key['Name'];
}
array_multisort($sort_name, SORT_ASC, $sort_date, SORT_ASC, $win);
print_r($win);
输出\
Array ( [日期] => Array ( [0] => 2015 年 10 月 7 日 [1] => 2014 年 10 月 14 日 [2] => 2016 年 10 月 12 日 ) [名称] => Array ( [0] => Jane Doe [ 1] => 纳什·帕特尔 [2] => 乔·公众 ) )
我已阅读文档,看来
array_multisort($sort_name, SORT_ASC, $sort_date, SORT_ASC, $win);
意味着 $win 将按名称和日期排序,但按名称排序比日期具有更高的优先级。
尝试添加更多具有不同日期的
Jane Doe
,以查看它们是否按日期排序。
因为你说数组不需要一起排序,这里是如何拆分它们并分别排序。
$win = array('Name'=>
array('Jane Doe ', 'Nash Patel ', 'Joe Public '),
'Date'=>
array('7 October 2015 ', '14 October 2014 ', '12 October 2016 '));
$dates = $win["Date"]; //split array
$names = $win["Name"]; //split array
usort($dates, "date_sort"); // custom sort on dates
asort($names); // sort names
var_dump($dates);
Var_dump($names);
function date_sort($a, $b) {
return strtotime($a) - strtotime($b);
}
输出:
array(3) {
[0]=>
string(16) "14 October 2014 "
[1]=>
string(15) "7 October 2015 "
[2]=>
string(16) "12 October 2016 "
}
array(3) {
[0]=>
string(9) "Jane Doe "
[2]=>
string(11) "Joe Public "
[1]=>
string(11) "Nash Patel "
}
使用多重排序时,所有数组参数必须包含相同的元素计数。您不需要附加
$win
作为最后一个参数来影响之前声明的元素。
将参数传递给函数时,任何可以通过引用修改的数组都将发生变化。直接从函数返回派生的任何参数都不会受到影响(并且无论如何都无法检索)。
由于日期格式不是“大端”,因此需要将其转换为一组可以简单排序的值。对每个值调用
strtotime()
将适当地生成 unix 时间戳整数。
代码:(演示)
array_multisort(
$win['Name'],
array_map('strtotime', $win['Date']),
$win['Date']
);
var_export($win);