自訂排序函數(shù)回傳false或負(fù)數(shù)表示第一個(gè)參數(shù)應(yīng)該排在第二個(gè)參數(shù)的前面, 正數(shù)或true反之, 0相等
usort不保存鍵名
uasort 鍵名會(huì)保存下來
uksort 排序是對(duì)鍵名進(jìn)行的
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Sorting Multidimensional Arrays</title>
</head>
<body>
<?php
$a = [
[
'key1' => 940,
'key2' => 'blah',
],
[
'key1' => 23,
'key2' => 'this',
],
[
'key1' => 894,
'key2' => 'that',
],
];
var_dump($a);
// 比較的規(guī)則第一個(gè)小于第二個(gè)返回負(fù)數(shù)或false, 相當(dāng)于第一個(gè)的值減去第二個(gè), 如果前小后大則為負(fù), 前大后小則為正, 兩個(gè)一樣, 則為0
//按第一個(gè)數(shù)組key1的數(shù)字從小到大排序
function asc_number_sort($x, $y) {
echo "iteration x1 = ".$x['key1'].' y = '.$y['key1'];
if ($x['key1'] > $y['key1']) {
return true; // true或正數(shù)表示第二個(gè)參數(shù)應(yīng)該排在前面, 小的在前
} elseif ($x['key1'] < $y['key1']) {
return false; // false或負(fù)數(shù)意味著第一個(gè)參數(shù)排第二個(gè)參數(shù)的前面, 小的在前
} else {
return 0; //表示兩個(gè)數(shù)相等
}
}
usort($a, 'asc_number_sort');
echo '針對(duì)key1從小到大排序';
var_dump($a);
//對(duì)第二個(gè)關(guān)鍵字進(jìn)行排序
function string_sort($x, $y) {
return strcasecmp($x['key2'], $y['key2']); // strcmp區(qū)分大小寫 strcasecmp不區(qū)分大小寫
}
usort($a, 'string_sort');
echo '針對(duì)key2按字母排序';
var_dump($a);
// create the array.
// Array structs
// StudentId = > ["name" => "Name", "grade" => xx.x];
$students = [
256 => ['name' => 'Jon', 'grade' => '98.5'],
2 => ['name' => 'Vance', 'grade' => '85.1'],
9 => ['name' => 'Stephen', 'grade' => '94.0'],
364 => ['name' => 'Steve', 'grade' => '85.1'],
68 => ['name' => 'Rob', 'grade' => '74.6'],
];
function name_sort($x, $y) {
return strcasecmp($x['name'], $y['name']);
}
function grade_sort($x, $y) {
return $x['grade'] < $y['grade'];
}
echo print_r($students, 1);
uasort($students, 'name_sort'); //保持鍵并使用自定義排序
echo print_r($students, 1);
uasort($students, 'grade_sort');
echo print_r($students, 1);
?>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Sorting Multidimensional Arrays</title>
</head>
<body>
<?php
$db = mysqli_connect('192.168.31.172', 'root', 'root', 'phpadvanced');
mysqli_query($db, "set names utf8");
if(!empty($_POST['task'])) {
$parent_id = 0;
if(isset($_POST['parent_id']) && filter_var($_POST['parent_id'], FILTER_VALIDATE_INT, ['min_range' => 1])) {
$parent_id = $_POST['parent_id'];
}
$task = mysqli_real_escape_string($db, strip_tags($_POST['task']));
$q = "INSERT INTO tasks (parent_id, task) VALUES ($parent_id, '$task')";
echo $q;
$r = mysqli_query($db, $q);
if(mysqli_affected_rows($db) == 1) {
echo '<p>任務(wù)添加成功</p>';
} else {
echo '<p>任務(wù)添加失敗</p>';
}
}
?>
<form action="add_task.php" method="post">
<fieldset>
<legend>添加一個(gè)任務(wù)</legend>
<p>任務(wù): <input name="task" type="text" size="60" maxlength="100" required> </p>
<p>上級(jí)任務(wù): <select name="parent_id">
<option value="0">無上級(jí)</option>
<?php
$q = 'SELECT task_id, parent_id, task FROM tasks WHERE date_completed="0000-00-00 00:00:00" ORDER BY date_added ASC';
$r = mysqli_query($db, $q);
$tasks = [];
while(list($task_id, $parent_id, $task) = mysqli_fetch_array($r, MYSQLI_NUM)) {
echo "<option value=\"$task_id\">$task</option>";
$tasks[] = ['task_id' => $task_id, 'parent_id' => $parent_id, 'task' => $task];
}
?>
</select></p>
<input name="submit" type="submit" value="添加這個(gè)任務(wù)" />
</fieldset>
</form>
<?php
// 對(duì)任務(wù)的父id進(jìn)行排序
function parent_sort($x, $y) {
return ($x['parent_id'] > $y['parent_id']);
}
usort($tasks, 'parent_sort');
echo '<h2>當(dāng)前的任務(wù)列表</h2><ul>';
foreach ($tasks as $task) {
echo "<li>{$task['task']}</li>\n";
}
echo '</ul>';
?>
</body>
</html>
CREATE TABLE tasks (
task_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INT UNSIGNED NOT NULL DEFAULT 0,
task VARCHAR(100) NOT NULL,
date_added TIMESTAMP NOT NULL,
date_completed TIMESTAMP,
PRIMARY KEY (task_id),
INDEX parent (parent_id),
INDEX added (date_added),
INDEX completed (date_completed)
);
以上就介紹了php多維數(shù)組排序以及實(shí)際工作中的應(yīng)用,包括了方面的內(nèi)容,希望對(duì)PHP教程有興趣的朋友有所幫助。