PHP 다차원 배열 정렬 및 실제 응용

WBOY
풀어 주다: 2016-08-08 09:20:40
원래의
1005명이 탐색했습니다.

사용자 정의 정렬 함수가 false 또는 음수를 반환하는 경우 첫 번째 매개변수가 두 번째 매개변수(양수 또는 true)보다 먼저 정렬되어야 함을 의미합니다. 그렇지 않으면 0이 같습니다.
usort는 키를 저장하지 않습니다. name
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.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿