`
dcj3sjt126com
  • 浏览: 1885566 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

php多维数组排序以及实际工作中的应用

    博客分类:
  • PHP
阅读更多

自定义排序函数返回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的多维数组排序函数

    多维数组排序

    本篇文章将深入探讨“多维数组排序”这一主题,以及如何通过优化技术来减轻MySQL排序的压力。多维数组,也称为矩阵或二维数组,是包含一个或多个数组的数据结构。在处理这种数据时,正确排序可以显著提升数据分析...

    PHP 多维数组的排序问题 根据二维数组中某个项排序

    在处理PHP多维数组排序问题时,特别是根据二维数组中某个特定项进行排序的情况,有几种方法可以实现。其中一种有效的方法是使用PHP内置的array_multisort函数。该函数可以对多个数组或数组中的多个列进行排序,适用...

    php 多维数组的排序

    php 多维数组的排序php 多维数组的排序

    多维数组让数组根据某个字段的大小排序

    #### 二、PHP中多维数组排序的实现方法 本例中,我们希望对一个多维数组按照其中一个字段(本例为`'norder'`)的值进行降序排序。具体步骤如下: 1. **初始化数组**: ```php $arr = array( array('name' =&gt; '...

    PHP多维数组排序array详解

    PHP多维数组排序是编程中的一项基础但重要的技能,它能够帮助开发者高效地组织和操作复杂的数据结构。通过上面提供的内容,我们可以详细探讨如何在PHP中使用内置函数和自定义方法对多维数组进行排序。 首先,我们要...

    php简单实现多维数组排序的方法

    在多维数组排序中,我们通常需要基于数组中的某个键值来作为排序依据。在提供的实例中,`$data`是一个二维数组,每个子数组都包含'one'和'two'两个键,我们希望根据'one'键的值对整个数组进行排序。 以下是如何使用...

    php多维数组转化为一维数组并重组源码

    在PHP开发过程中,处理数组是一项常见的任务,尤其是当数据结构变得复杂时,如多维数组。多维数组是由一个或多个数组嵌套形成的数组,它能够存储大量的层次化数据。然而,有时候我们需要将这些复杂的多维数组转换为...

    php多维数组合并类库

    这里我们将深入探讨PHP中如何进行多维数组的合并以及相关的数组操作。 首先,标题中的"php多维数组合并类库"指的是一个专门用于合并多维数组的PHP类库。这类库通常提供了一组方法,以方便开发者进行各种复杂的数...

    PHP多维数组指定多字段排序的示例代码

    当涉及到多维数组排序时,我们可以根据数组中的多个字段进行排序。 ### 使用`array_multisort`排序方法 在多维数组排序时,`array_multisort`函数可以接收一个或多个数组参数,并根据这些数组进行排序。`array_...

    php array_map array_multisort 高效处理多维数组排序

    对多维数组排序,通用的作法是1 获取利用排序的数据并且将其放入数组$arrSort. 其中键索引为要排序数组的索引,保证唯一性 2 利用排序函数sort等对$arrSort进行排序. 3 遍历$arrSort, 根据其索引,获取多维数组的数据,...

    PHP 多维数组排序实现代码

    PHP 多维数组排序实现代码是 PHP 编程语言中的一种功能强大且灵活的数组排序方法。该方法使用 array_multisort() 函数来实现对多维数组的排序。 array_multisort() 函数的语法为:bool array_multisort ( array ar1...

    PHP实现的多维数组排序算法分析

    在PHP编程中,处理多维数组排序是一项常见的任务,尤其在数据处理和分析时。本文将深入探讨如何使用PHP实现多维数组的排序算法,并提供相关的操作技巧与注意事项。 首先,我们要了解PHP中的多维数组,它是由一个或...

    PHP 多维数组排序(usort,uasort)

    当我们想对多维数组进行排序时,多维数组的每个元素又是一数组类型,而两个数组如何比较大小?这是需要用户自定义的(是按每个数组的第一元素比较还是…)。 复制代码 代码如下: &lt;?php //定义多维数组 $a = array...

    php二维数组排序

    本文档介绍了一种使用 `array_multisort()` 函数来实现多维数组排序的方法,并通过一个具体的示例展示了其用法。 #### 二、知识点详解 ##### 1. `array_multisort()` 函数 `array_multisort()` 是 PHP 中用于同时...

    php计算多维数组中所有值总和的方法

    - `array_map()`: 应用用户定义的函数到数组的每个元素上,可以用于多维数组,但不会计算总和。 - `array_walk()` 和 `array_walk_recursive()`: 分别用于遍历一维和多维数组,可以结合用户定义的函数进行操作。 - `...

    array_multisort实现PHP多维数组排序示例讲解

    下面我们将详细介绍array_multisort()函数的用法以及在多维数组排序中的应用。 首先,array_multisort()函数可以接受数组作为参数,进行多重排序。排序时,首先对第一个数组的元素进行排序,若有相同的元素,则会...

    php根据某字段对多维数组进行排序的方法

    希望本文介绍的PHP多维数组排序方法能够帮助到正在学习或工作中遇到此类问题的朋友们。通过理解并掌握这些数组操作和排序技巧,你将能够更加灵活地处理各种数据结构,有效地提高开发效率和程序性能。

    PHP实现指定字段的多维数组排序函数分享

    在实际应用中,我们经常会遇到需要对多维数组进行排序的情况,尤其是在数组元素是关联数组时,根据数组中某一字段的值来排序数组将变得尤为重要。 在本篇文章中,我们主要关注的是如何实现PHP中针对多维数组指定...

Global site tag (gtag.js) - Google Analytics