【问题标题】:How to sort PHP array when there are multiple values当有多个值时如何对PHP数组进行排序
【发布时间】:2016-01-23 08:55:42
【问题描述】:

我有一个数组如下:

$people = array(
    200 => array(
        'id' => 12345,
        'first_name' => 'Joe',
        'surname' => 'Bloggs',
        'age' => 23,
        'sex' => 'm'
    ),
    100 => array(
        'id' => 12346,
        'first_name' => 'Adam',
        'surname' => 'Smith',
        'age' => 18,
        'sex' => 'm'
    ),
    500 => array(
        'id' => 12347,
        'first_name' => 'Amy',
        'surname' => 'Jones',
        'age' => 21,
        'sex' => 'f'
    )

我想根据您可以看到的第一个值 200、100 和 500 对这个数组进行排序。

【问题讨论】:

  • 它不是第一个值,它被称为key,因为这是ksort函数。
  • 我建议您开始阅读您使用的语言的文档。它允许您查找功能和解释。这是 php 提供的数组处理函数的示例:php.net/manual/en/ref.array.php

标签: php arrays


【解决方案1】:

$result = array(
    array('name' => 'Tahir', 'age' => '40'),
    array('name' => 'Usman', 'age' => '30'),
    array('name' => 'Danish', 'age' => '20'),
    array('name' => 'Aneeq', 'age' => '10')
);

echo '<pre>';
print_r($result);
echo '</pre>';

foreach ($result as $key => $row) {
    $name[$key]  = $row['name'];
    $age[$key] = $row['age'];
}


array_multisort($age, SORT_ASC, $result);

echo '<pre>';
print_r($result);
echo '</pre>';

echo "<pre>";
echo "Name\t\tAge";
foreach ( $result as $var ) {
    echo "\n", $var['name'], "\t\t", $var['age'];
}

【讨论】:

    【解决方案2】:

    您可以使用ksort() 升序排列,krsort() 降序排列。

    ksort($people);

    krsort($people);

    【讨论】:

    • 谢谢,如果我想在数组中按“年龄”排序呢?
    • @phpMax 在那种情况下this question 有一些很棒的答案。
    【解决方案3】:

    这应该很简单:

    ksort($people);
    

    要使其按实际数值排序(使1000500 之后而不是在100 之后),请使用:

    ksort($people, SORT_NUMERIC);
    

    ksort() 按其键对数组进行排序。

    例如:

    php > var_dump($people);
    array(3) {
      [200]=>
      array(5) {
        ["id"]=>
        int(12345)
        ["first_name"]=>
        string(3) "Joe"
        ["surname"]=>
        string(6) "Bloggs"
        ["age"]=>
        int(23)
        ["sex"]=>
        string(1) "m"
      }
      [100]=>
      array(5) {
        ["id"]=>
        int(12346)
        ["first_name"]=>
        string(4) "Adam"
        ["surname"]=>
        string(5) "Smith"
        ["age"]=>
        int(18)
        ["sex"]=>
        string(1) "m"
      }
      [500]=>
      array(5) {
        ["id"]=>
        int(12347)
        ["first_name"]=>
        string(3) "Amy"
        ["surname"]=>
        string(5) "Jones"
        ["age"]=>
        int(21)
        ["sex"]=>
        string(1) "f"
      }
    }
    php > ksort($people);
    php > var_dump($people);
    array(3) {
      [100]=>
      array(5) {
        ["id"]=>
        int(12346)
        ["first_name"]=>
        string(4) "Adam"
        ["surname"]=>
        string(5) "Smith"
        ["age"]=>
        int(18)
        ["sex"]=>
        string(1) "m"
      }
      [200]=>
      array(5) {
        ["id"]=>
        int(12345)
        ["first_name"]=>
        string(3) "Joe"
        ["surname"]=>
        string(6) "Bloggs"
        ["age"]=>
        int(23)
        ["sex"]=>
        string(1) "m"
      }
      [500]=>
      array(5) {
        ["id"]=>
        int(12347)
        ["first_name"]=>
        string(3) "Amy"
        ["surname"]=>
        string(5) "Jones"
        ["age"]=>
        int(21)
        ["sex"]=>
        string(1) "f"
      }
    }
    php >
    

    【讨论】:

      【解决方案4】:

      你可以试试这个解决方案。

      <?php
        $people = array(
        200 => array(
          'id' => 12345,
          'first_name' => 'Joe',
          'surname' => 'Bloggs',
          'age' => 23,
          'sex' => 'm'
      ),
      100 => array(
          'id' => 12346,
          'first_name' => 'Adam',
          'surname' => 'Smith',
          'age' => 18,
          'sex' => 'm'
      ),
      500 => array(
          'id' => 12347,
          'first_name' => 'Amy',
          'surname' => 'Jones',
          'age' => 21,
          'sex' => 'f'
      ));
      ksort($people, SORT_NUMERIC);
      print_r($people);
      ?>
      

      【讨论】:

        【解决方案5】:

        您可以根据需要使用以下两个功能:-

        ksort() - 根据键对关联数组进行升序排序

        krsort() - 根据键对关联数组进行降序排序

        如何使用它:-

        ksort($people);

        krsort($people);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-11
          • 2015-02-19
          • 1970-01-01
          • 2021-07-02
          • 1970-01-01
          • 2012-06-15
          • 1970-01-01
          相关资源
          最近更新 更多