【问题标题】:Split php array into chunks/sections by delimiter value通过分隔符值将 php 数组拆分为块/部分
【发布时间】:2017-01-29 09:57:18
【问题描述】:

我编写了以下代码将数组拆分为三个块/部分:

$data = [
    'SECTION1',
    '1',
    '2',
    '3',
    'SECTION2',
    '4',
    '5',
    'SECTION3',
    '6',
    '7',
    '8',
];


$results = [];


foreach ($data as $value) {
    if(strpos($value, 'SECTION') !== false) {
        array_push($results, []);
    } else {
        array_push($results[count($results)-1], $value);
    }
}

这是结果:

$result = [
    [
        '1',
        '2',
        '3'
    ], [
        '4',
        '5'
    ],[
        '6',
        '7',
        '8'
    ]
];

有没有更直观、更易读的方法来使用函数式编程方法来转换这个数组?

【问题讨论】:

    标签: php arrays functional-programming


    【解决方案1】:

    检查这个更易于阅读和管理。

    $data = [
        'SECTION1',
        '1',
        '2',
        '3',
        'SECTION2',
        '4',
        '5',
        'SECTION3',
        '6',
        '7',
        '8',
    ];
    
    
    $results = [];
    
    
    foreach ($data as $value) {
        if(strpos($value, 'SECTION') !== false) {
            $results[$value] = array();
        } else {
            $keys = array_keys($results);
            $last = end($keys);
            $results[$last][] = $value;
        }
    }
    echo '<pre>';
    print_r($results);
    exit;
    

    输出如下

    Array (
        [SECTION1] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )
    
        [SECTION2] => Array
            (
                [0] => 4
                [1] => 5
            )
    
        [SECTION3] => Array
            (
                [0] => 6
                [1] => 7
                [2] => 8
            )
    
    )
    

    【讨论】:

      【解决方案2】:
      $data = [
          'SECTION1',
          '1',
          '2',
          '3',
          'SECTION2',
          '4',
          '5',
          'SECTION3',
          '6',
          '7',
          '8',
      ];
      
      
      $cnt = 0;
      $result = array();
      foreach( $data as $arr ) {
          if( strpos($arr, 'SECTION') !== false) {
              $cnt++;
          } else {
              $result[$cnt][] = $arr;
          }   
      }
      
      
      echo "<pre>";   
      print_r($result);
      

      //更新

      Array
      (
          [1] => Array
              (
                  [0] => 1
                  [1] => 2
                  [2] => 3
              )
      
          [2] => Array
              (
                  [0] => 4
                  [1] => 5
              )
      
          [3] => Array
              (
                  [0] => 6
                  [1] => 7
                  [2] => 8
              )
      
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 2022-07-29
        • 2021-08-29
        相关资源
        最近更新 更多