首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Cakephp中对()循环排序

在Cakephp中对()循环排序
EN

Stack Overflow用户
提问于 2019-08-31 11:28:03
回答 2查看 247关注 0票数 0

我正在慢慢地学习PHP,我需要一些帮助来对foreach()循环进行排序。目前,这个循环从数据库表中获取一个ID和名称,并将其显示在一个列表中,但是,我在按字母顺序排序该列表时遇到了问题。这就是现在的样子,所有的记录都被检索出来,并显示在一个整洁的列表中:

代码语言:javascript
复制
<?php foreach ($disabilities as $disability):?>
        <option value=<?=($disability->id)?>><?=($disability->name)?></option>
<?php endforeach; ?>

这就是我尝试过的:

代码语言:javascript
复制
<?php myArray = array($disabilities)
      sort($disabilities)  
      foreach ($disabilities as $disability): ?>
           <option value=<?=($disability->id)?>><?=($disability->name)?></option>
      <?php endforeach; ?>

任何关于我是否走在正确或错误道路上的建议都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-31 12:23:22

你可以通过两种方法来实现这一点。1)在从数据库查询时对此进行排序。2)对php中的数组进行排序,这里是一个在php中排序的示例代码。

代码语言:javascript
复制
//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对象更改为数组,现在您将像这样回显

代码语言:javascript
复制
echo $disability['name'];
票数 0
EN

Stack Overflow用户

发布于 2019-08-31 12:56:17

您可以使用PHP函数添加用户定义的比较函数。

代码语言:javascript
复制
$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中使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57737618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档