我为管理员创建了单独的数组:
$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>
答案 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);