自定义排序函数返回false或负数意味着第一个参数应该排在第二个参数的前面, 正数或true反之, 0相等
usort不保存键名
uasort 键名会保存下来
uksort 排序是对键名进行的
<!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) );
相关推荐
php 多维数组排序,应用php的多维数组排序函数
php 多维数组的排序php 多维数组的排序
PHP 多维数组排序 根据二维数组中某个项排序,需要的朋友可以参考下。
多维数组让数组根据某个字段的大小排序,方便用户直接获取
主要为大家详细介绍了PHP多维数组排序array的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
对多维数组排序,通用的作法是1 获取利用排序的数据并且将其放入数组$arrSort. 其中键索引为要排序数组的索引,保证唯一性 2 利用排序函数sort等对$arrSort进行排序. 3 遍历$arrSort, 根据其索引,获取多维数组的数据,...
主要介绍了php简单实现多维数组排序的方法,涉及php数组的遍历及array_multisort函数的相关使用技巧,需要的朋友可以参考下
当我们想对多维数组进行排序时,多维数组的每个元素又是一数组类型,而两个数组如何比较大小?这是需要用户自定义的(是按每个数组的第一元素比较还是…)。 复制代码 代码如下: <?php //定义多维数组 $a = array...
主要介绍了PHP实现的多维数组排序算法,结合实例形式对比分析了php针对多维数组及带有键名的多维数组进行排序相关操作技巧与注意事项,需要的朋友可以参考下
array_multisort (PHP 4, PHP 5) array_multisort — 对多个数组或多维数组进行排序 说明 bool array_multisort ( array ar1 [, mixed arg [, mixed … [, array …]]] ) 如果成功则返回 TRUE,失败则返回 FALSE。...
主要介绍了php实现多维数组排序的方法,结合实例形式分析了php针对多维数组的排序操作相关技巧,需要的朋友可以参考下
本文分享了一段PHP指定字段的多维数组排序方法的代码,这段代码可实现根据field字段对数组进行排序。 复制代码 代码如下: function sortArrByField(&$array, $field, $desc = false){ $fieldArr = array(); ...
本篇文章主要介绍了PHP多维数组指定多字段排序的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
array_multisort — 对多个数组或多维数组进行排序 说明 bool array_multisort ( array ar1 [, mixed arg [, mixed … [, array …]]] ) array_multisort (PHP 4, PHP 5) 如果成功则返回 TRUE,失败则返回 FALSE。...
一个开发中常用的php多维数组合并类,希望对小伙伴们的学习实践有所帮助,多维数组合并或者多维数组和一维数组合并,数组排序,添加索引,添加前后缀。