按用户名字母顺序排列多个数组

时间:2019-01-08 04:04:35

标签: php arrays

我为管理员创建了单独的数组:

$admins[] = array(
                'username' => 'john',
                'admin' => '1',
                'level' => '1'
            );
$admins[] = array(
                'username' => 'adam',
                'admin' => '1',
                'level' => '1'
            );
$admins[] = array(
                    'username' => 'ana',
                    'admin' => '1',
                    'level' => '2'
                );

现在,我想让所有用户名都显示在选择选项元素中。但是用户名应按字母顺序排列。我要做的是将所有管理数组组合成一个多维数组,然后创建了一个函数,用于按用户名对数组进行排序。

$items = array();
foreach($admins as $username) {
    $items[] = $username;
}
#echo "<pre>";
#print_r($items);

function sortByName($a, $b) {
    return $a['username'] - $b['username'];
}
usort($items, 'sortByName');

在那之后,我试图将其显示在选择选项元素中。但是没有安排用户名。

<select name="support-name">
                <option value="" required>select</option>
                <?
                foreach ($admins as $admin){?>
                     <option value="<?=$admin['username']?>"><?=ucwords($admin['username'])?></option>
                        <?}
                    ?>

                <?}
                ?>
            </select>

4 个答案:

答案 0 :(得分:1)

您可以使用strcmp()

strcmp()函数比较两个字符串,它是二进制安全且区分大小写的。

示例-

 function sortByOrder($a, $b) {
        return strcmp($a['username'], $b['username']);
    }

尝试一下

$admins[] = array(
                'username' => 'john',
                'admin' => '1',
                'level' => '1'
            );
$admins[] = array(
                'username' => 'adam',
                'admin' => '1',
                'level' => '1'
            );
$admins[] = array(
                    'username' => 'ana',
                    'admin' => '1',
                    'level' => '2'
                );

function sortByOrder($a, $b) {
    return strcmp($a['username'], $b['username']);
}

usort($admins, 'sortByOrder');

表格代码

<select name="support-name">
        <option value="" required>select</option>
        <?
        foreach ($admins as $admin){?>
             <option value="<?=$admin['username']?>"><?=ucwords($admin['username'])?></option>
                <?}
            ?>

</select>

答案 1 :(得分:0)

这是简单的方法

<?php
  $admins[] = array(
                'username' => 'john',
                'admin' => '1',
                'level' => '1'
            );
$admins[] = array(
                'username' => 'adam',
                'admin' => '1',
                'level' => '1'
            );
$admins[] = array(
                    'username' => 'ana',
                    'admin' => '1',
                    'level' => '2'
                );

$items = array();

foreach($admins as $username) {
    $items[] = $username['username'];
}
?>
    // here the display
<html>
<body>
 	<select name="support-name">
        <option value="" required>select</option>
        <?php
        sort($items); 
        foreach($items as $val){
        	echo "<option value=''>".ucwords($val)."</option>";
        }
        ?>
    </select>
 </body>
 </html>

答案 2 :(得分:0)

如果您只需要一个用户名列表,而放弃每个admin_structure中的其他键,则可以创建一个新数组$ usernames_for_html并在您的第一个foreach中填充它,然后在该新数组中进行asort()。这会导致新的(一维)数组仅包含排序的用户名,您可以根据需要对其进行格式化/清理。

$usernames_for_html = array();

foreach($admins AS $user){
   $usernames_for_html[] = ucwords($user['username']); //SANITIZE TO YOUR NEED
}

asort($usernames_for_html);

答案 3 :(得分:0)

我想你们都错过了array_multisort方法!我在这里创建了一个示例。

$arr[1][0] = "b";
$arr[2][0] = "E";
$arr[3][0] = "A";

$arr[1][1] = "C";
$arr[2][1] = "A";
$arr[3][1] = "D";

$arr[1][2] = "E";
$arr[2][2] = "C";
$arr[3][2] = "E";

$arr[1][3] = "d";
$arr[2][3] = "B";
$arr[3][3] = "C";

$arr[1][4] = "A";
$arr[2][4] = "D";
$arr[3][4] = "B";



array_multisort($arr[1], SORT_NATURAL | SORT_FLAG_CASE, SORT_ASC, 
            $arr[2], SORT_NATURAL, SORT_ASC,
            $arr[3], SORT_NATURAL, SORT_ASC);

var_dump($arr);