【问题标题】:Group elements by value按值分组元素
【发布时间】:2017-12-21 09:53:46
【问题描述】:

我有一个这样的数组:

array(
    [0] => array(
        'date' => '2017-12-20',
        'name' => 'test A',
        'kwa' => 'kwa1, kwa2'
    ),
    [1] => array(
        'date' => '2017-12-20',
        'name' => 'test B',
        'kwa' => ''
    ),
    [2] => array(
        'date' => '2017-12-21',
        'name' => 'test C',
        'kwa' => 'kwa1'
    ),
    [3] => array(
        'date' => '2017-12-22',
        'name' => 'test D',
        'kwa' => ''
    ),
    [4] => array(
        'date' => '2017-12-22',
        'name' => 'test E',
        'kwa' => ''
    ),
)

我想将同一天的所有元素分组到一个数组中。类似的东西:

array(
    ['2017-12-20'] => array( '0', '1'),
    ['2017-12-21'] => array( '2' ),
    ['2017-12-22'] => array( '3', '4' ),
)

PHP 有什么函数可以做到这一点?或者有谁知道最好的解决方案?谢谢!!!

【问题讨论】:

  • 一个简单的解决方案是遍历您的主数组,并在遇到日期时构建一个新数组并插入到正确的位置。希望这会有所帮助!
  • @N.Ivanov 我已经考虑过你的想法,但仍然发现其他可能比这更好? :D

标签: php


【解决方案1】:

这是您的解决方案...

输入

<?php 
    $array = array(
        array(
            'date' => '2017-12-20',
            'name' => 'test A',
            'kwa' => 'kwa1, kwa2'
        ),array(
            'date' => '2017-12-20',
            'name' => 'test B',
            'kwa' => ''
        ),array(
            'date' => '2017-12-21',
            'name' => 'test C',
            'kwa' => 'kwa1'
        ),array(
            'date' => '2017-12-22',
            'name' => 'test D',
            'kwa' => ''
        ),array(
            'date' => '2017-12-22',
            'name' => 'test E',
            'kwa' => ''
        ),
    );

解决方案

    $new = array();
    foreach($array as $r){
       $new[$r['date']][] = array('name'=>$r['name'],'kwa' => $r['kwa']); 
    }
    echo "<pre>";print_r($new);

?>

输出

    Array
(
    [2017-12-20] => Array
        (
            [0] => Array
                (
                    [name] => test A
                    [kwa] => kwa1, kwa2
                )

            [1] => Array
                (
                    [name] => test B
                    [kwa] => 
                )

        )

    [2017-12-21] => Array
        (
            [0] => Array
                (
                    [name] => test C
                    [kwa] => kwa1
                )

        )

    [2017-12-22] => Array
        (
            [0] => Array
                (
                    [name] => test D
                    [kwa] => 
                )

            [1] => Array
                (
                    [name] => test E
                    [kwa] => 
                )

        )

)

【讨论】:

    【解决方案2】:
    $arr = array();
    
    foreach($array1 as $key => $item)
    {
       $arr[$item['date']][$key] = $key;
    }
    
    echo "<pre>";
    print_r($arr);
    

    【讨论】:

      【解决方案3】:

      我会使用类似以下的内容:

      $array = [
          [
              'date' => '2017-12-20',
              'name' => 'test A',
              'kwa' => 'kwa1, kwa2'
          ],
          [
              'date' => '2017-12-20',
              'name' => 'test B',
              'kwa' => ''
          ],
          [
              'date' => '2017-12-21',
              'name' => 'test C',
              'kwa' => 'kwa1'
          ],
          [
              'date' => '2017-12-22',
              'name' => 'test D',
              'kwa' => ''
          ],
          [
              'date' => '2017-12-22',
              'name' => 'test E',
              'kwa' => ''
         ],
      ];
      
      $formatted = [];
      foreach ($array as $k => $v) {
          $formatted[$v['date']] = $formatted[$v['date']] ?? [];
          array_push($formatted[$v['date']], $k);
      }
      
      print_r($formatted);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2017-09-25
        相关资源
        最近更新 更多