我有这个PHP代码,工作正常。它按姓氏对我的数据进行排序。问题是在对姓氏进行排序后,名字不排序。有人有想法吗?我在php5上运行它。
for ($i = 0; $i <= sizeof($post_data['surname']) - 1; $i++) {
// Create the object to JSON encode
$arrData = array(
'surname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['surname'][$i])))),
'firstname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['firstname'][$i])))),
'lastname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['lastname'][$i])))),
'table' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['table'][$i])))),
);
$arrDataFull[] = $arrData;
}
usort($arrDataFull, function ($a, $b){
return strcmp($a["lastname"], $b["lastname"]);
});
答案 0 :(得分:0)
你似乎错过了strcmp为你做什么或者usort为你做了什么。 Strcmp比较作为参数给出的两个字符串,并以字母顺序返回第一个字符串是否在第二个字符串之前。
Usort允许您传递将在您的集合上运行的匿名函数,直到它被排序。每次迭代都会比较您从集合中获取的两个元素作为参数($ a和$ b)。在此函数中,您必须定义比较这些参数的方式。
因此,当你将第一个人的名字与第二个人的姓氏进行比较时,你真的没有得到你想要的东西。
相反,首先用姓氏比较两个人,如果他们的姓氏相同,则按照他们的名字比较两个人。
所以你的代码看起来像这样:
for ($i = 0; $i <= sizeof($post_data['surname']) - 1; $i++) {
// Create the object to JSON encode
$arrData = array(
'surname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['surname'][$i])))),
'firstname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['firstname'][$i])))),
'lastname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['lastname'][$i])))),
'table' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['table'][$i])))),
);
$arrDataFull[] = $arrData;
}
usort($arrDataFull, function ($a, $b){
if($a["lastname"] == $b["lastname"]) {
return strcmp($a["firstname"], $b["firstname"]);
}
return strcmp($a["lastname"], $b["lastname"]);
});
答案 1 :(得分:0)
$lastnames = array();
$firstnames = array();
for ($i = 0; $i <= sizeof($post_data['surname']) - 1; $i++) {
// Create the object to JSON encode
$fname = str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['firstname'][$i]))));
$lname = str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['lastname'][$i]))));
$arrData = array(
'surname' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['surname'][$i])))),
'firstname' => $fname,
'lastname' => $lname,
'table' => str_replace('"', '\"', str_replace('\\', '\\\\', htmlspecialchars_decode(urldecode($post_data['table'][$i])))),
);
$lastnames[] = $lname;
$firstnames[] = $fname;
$arrDataFull[] = $arrData;
}
array_multisort($lastnames, SORT_ASC, $firstnames, SORT_ASC, $arrDataFull);