我正在慢慢地学习PHP,我需要一些帮助来对foreach()循环进行排序。目前,这个循环从数据库表中获取一个ID和名称,并将其显示在一个列表中,但是,我在按字母顺序排序该列表时遇到了问题。这就是现在的样子,所有的记录都被检索出来,并显示在一个整洁的列表中:
<?php foreach ($disabilities as $disability):?>
<option value=<?=($disability->id)?>><?=($disability->name)?></option>
<?php endforeach; ?>这就是我尝试过的:
<?php myArray = array($disabilities)
sort($disabilities)
foreach ($disabilities as $disability): ?>
<option value=<?=($disability->id)?>><?=($disability->name)?></option>
<?php endforeach; ?>任何关于我是否走在正确或错误道路上的建议都将不胜感激!
发布于 2019-08-31 12:23:22
你可以通过两种方法来实现这一点。1)在从数据库查询时对此进行排序。2)对php中的数组进行排序,这里是一个在php中排序的示例代码。
//stdclass object arrays to simple array
$disabilities = json_decode(json_encode($object), True);
$sortArray = array();
foreach($disabilities as $disability){
foreach($disability as $key=>$value){
if(!isset($sortArray[$key])){
$sortArray[$key] = array();
}
$sortArray[$key][] = $value;
}
}
$orderby = "name"; //change this to whatever key you want to apply sorting for
array_multisort($sortArray[$orderby], SORT_ASC, $disabilities);希望它对你有用
编辑:,因为我已经将它从stdClass对象更改为数组,现在您将像这样回显
echo $disability['name'];发布于 2019-08-31 12:56:17
您可以使用PHP函数添加用户定义的比较函数。
$obj = (object) array(
['id' => '1', 'name' => 'Ronda'],
['id' => '2', 'name' => 'Aba'],
['id' => '3', 'name' => 'Mac']
);
//convert obj to array usort only accept array
$disabilities = json_decode(json_encode($obj), true);
//define custom function
function sortByName($a, $b) {
//compare two strings
return strcmp($a['name'], $b['name']);
}
//sort using usort before use
usort($disabilities, 'sortByName');
//output
Array ( [0] => Array ( [id] => 2 [name] => Aba ) [1] => Array ( [id] => 3 [name] => Mac ) [2] => Array ( [id] => 1 [name] => Ronda ) )工作演示:https://repl.it/repls/GruesomeExaltedDevicedriver,在对数组进行排序之后,可以直接在foreach中使用。
https://stackoverflow.com/questions/57737618
复制相似问题