首页 > 解决方案 > 如何按字母顺序显示数组?

问题描述

我需要显示一个包含来自我的数据库的链接的页面

array (size=5)
0 => 
array (size=3)
  'id' => string '1' (length=1)
  'name' => string 'apple' (length=5)
  'url' => string 'http://iphone7' (length=14)
1 => 
array (size=3)
  'id' => string '2' (length=1)
  'name' => string 'samsung' (length=7)
  'url' => string 'http://samsung' (length=14)
2 => 
array (size=3)
  'id' => string '3' (length=1)
  'name' => string 'xiaom' (length=5)
  'url' => string 'http://xiaomi' (length=13)
3 => 
array (size=3)
  'id' => string '6' (length=1)
  'name' => string 'sony' (length=4)
  'url' => string 'http://sony' (length=11)
4 => 
array (size=3)
  'id' => string '7' (length=1)
  'name' => string 'nokia' (length=5)
  'url' => string 'http://nokia' (length=12)

像这样

A  
apple <-- it's a link name with url
N
nokia
S
samsung
sony
X
xaomi

按字母顺序(大写)我知道如何使用普通数组(只是名称)

    $result = array();
    $previous = null;
    $i = 0;
    foreach ($this->model as $value) {
        $firstLetter = substr($value, 0, 1);
        if ($previous !== $firstLetter) {
            $result[$i] = mb_convert_case($firstLetter, MB_CASE_UPPER, "UTF- 
            8");
            $i++; 
        }
        $result[$i] = $value;
        $previous = $firstLetter;
        $i++;
    }

但我不明白如何使用多维数组来做到这一点。我可以首先按“名称”属性排序,但是如何获取第一个字母以放入新数组

[
  "A" = > array ('name' => apple,'url' => 'http://...'), 
  "S" => array ('name' => samsung, 'url' => 'http://...')
]

用 foreach 运算符显示它

我使用这个函数来获取首字母

$result = array();
    $previous = null;
    $i = 0;
    foreach ($model as $value => $key) {
        $firstLetter = substr($key["name"], 0, 1);
        if ($previous !== $firstLetter) {
            $result[$firstLetter] = $firstLetter;
            $result[$firstLetter[$i]] = $key;             
        }
        // something must be here to assign secons array to 
       $result[$firstLetter
        $previous = $firstLetter;         
    }

我明白了

array (size=4)
'a' => 
   array (size=3)
   'id' => string '1' (length=1)
   'name' => string 'apple' (length=5)
   'url' => string 'http://iphone7' (length=14)
'n' => 
   array (size=3)
   'id' => string '7' (length=1)
   'name' => string 'nokia' (length=5)
   'url' => string 'http://nokia' (length=12)
's' => 
   array (size=3)
   'id' => string '2' (length=1)
   'name' => string 'samsung' (length=7)
   'url' => string 'http://samsung' (length=14)
'x' => 
   array (size=3)
   'id' => string '3' (length=1)
   'name' => string 'xiaom' (length=5)
   'url' => string 'http://xiaomi' (length=13)

标签: php

解决方案


您可以使用 array_multisort

array_multisort( array_column($yourArray, "name"), SORT_ASC, $yourArray );

推荐阅读