Heim > Artikel > Backend-Entwicklung > Mehrdimensionale PHP-Array-Sortierung und praktische Anwendung
Wenn die benutzerdefinierte Sortierfunktion eine falsche oder negative Zahl zurückgibt, bedeutet dies, dass der erste Parameter vor dem zweiten Parameter, positive Zahl oder wahr, sortiert werden sollte, andernfalls ist 0 gleich
usort speichert den Schlüssel nicht name
uasort Die Schlüsselnamen werden gespeichert
uksort-Sortierung wird für die Schlüsselnamen durchgeführt
<!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); // 比较的规则第一个小于第二个返回负数或false, 相当于第一个的值减去第二个, 如果前小后大则为负, 前大后小则为正, 两个一样, 则为0 //按第一个数组key1的数字从小到大排序 function asc_number_sort($x, $y) { echo "iteration x1 = ".$x['key1'].' y = '.$y['key1']; if ($x['key1'] > $y['key1']) { return true; // true或正数表示第二个参数应该排在前面, 小的在前 } elseif ($x['key1'] < $y['key1']) { return false; // false或负数意味着第一个参数排第二个参数的前面, 小的在前 } else { return 0; //表示两个数相等 } } usort($a, 'asc_number_sort'); echo '针对key1从小到大排序'; var_dump($a); //对第二个关键字进行排序 function string_sort($x, $y) { return strcasecmp($x['key2'], $y['key2']); // strcmp区分大小写 strcasecmp不区分大小写 } usort($a, 'string_sort'); echo '针对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>任务添加成功</p>'; } else { echo '<p>任务添加失败</p>'; } } ?> <form action="add_task.php" method="post"> <fieldset> <legend>添加一个任务</legend> <p>任务: <input name="task" type="text" size="60" maxlength="100" required> </p> <p>上级任务: <select name="parent_id"> <option value="0">无上级</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="添加这个任务" /> </fieldset> </form> <?php // 对任务的父id进行排序 function parent_sort($x, $y) { return ($x['parent_id'] > $y['parent_id']); } usort($tasks, 'parent_sort'); echo '<h2>当前的任务列表</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) );
Das Obige stellt die mehrdimensionale PHP-Array-Sortierung und ihre Anwendung in der praktischen Arbeit vor, einschließlich einiger Aspekte davon. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.