将二维数组的行按两列分组,并从原始行创建子数组[重复]

问题描述 投票:0回答:5

我已经困惑了好几个小时了。所以,我有这个数组

$data = array(
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'rental',
        'value' => 200
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'tax',
        'value' => 20
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'misc',
        'value' => 10
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'rental',
        'value' => 150
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'tax',
        'value' => 15
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'misc',
        'value' => 5
    ),
    array(
        'base_id' => 13,
        'offset' => 7,
        'name' => 'rental',
        'value' => 170
    )
);

我想通过base_id和offset对它们进行分组,所以变成这样

$result = array(
    array(
        array(
            'base_id' => 14,
            'offset' => 1,
            'name' => 'rental',
            'value' => 200
        ),
        array(
            'base_id' => 14,
            'offset' => 1,
            'name' => 'tax',
            'value' => 20
        ),
        array(
            'base_id' => 14,
            'offset' => 1,
            'name' => 'misc',
            'value' => 10
        ),
    ),
    array(
        array(
            'base_id' => 13,
            'offset' => 5,
            'name' => 'rental',
            'value' => 150
        ),
        array(
            'base_id' => 13,
            'offset' => 5,
            'name' => 'tax',
            'value' => 15
        ),
        array(
            'base_id' => 13,
            'offset' => 5,
            'name' => 'misc',
            'value' => 5
        ),
    ),
    array(
        array(
            'base_id' => 13,
            'offset' => 7,
            'name' => 'rental',
            'value' => 170
        )
    )
);

如何实现?

php arrays multidimensional-array grouping sub-array
5个回答
0
投票

解决办法是,

  • 首先使用
    foreach
    循环根据
    base_id
    offset
    键对所有数组进行分组。
  • 然后将回调函数
    array_merge()
    应用于结果数组。

所以你的代码应该是这样的:

// Suppose $data is your original array

$result_array = array();
foreach($data as $arr){
    $result_array[$arr['base_id']][$arr['offset']][] = $arr;
}
$result_array = call_user_func_array('array_merge', $result_array);

// display $result_array
echo '<pre>';
print_r($result_array);
echo '</pre>';

这是现场演示


0
投票

迭代您的数据并检查 base_id 是 13 还是 14。

$_14_result = array();
$_13_result = array();
foreach($data as $key=> $d){
    if($d["base_id"] == 14)
        $_14_result[] = $d;
    else 
        $_13_result[] = $d; 

}

将 base_id 13, 14 结果合并到数组中

$result[] = $_14_result;
$result[] = $_13_result;
print_r($result);

0
投票

没有 php 函数可以完成这项工作,但我为此提供了一个脚本:

$refrenceArray = array();
$outputArray = array();
$refrenceIndex = 0;
foreach($data as $key=>$value)
{
     if(!isset($refrenceArray[$value['base_id']]))
     {
          $refrenceArray[$value['base_id']] = $refrenceIndex;
          $refrenceIndex++;
     }
     $outputArray[$refrenceArray[$value['base_id']]][] = $value;
}

0
投票

试试这个 -

<?php
$data = array(
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'rental',
        'value' => 200
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'tax',
        'value' => 20
    ),
    array(
        'base_id' => 14,
        'offset' => 1,
        'name' => 'misc',
        'value' => 10
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'rental',
        'value' => 150
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'tax',
        'value' => 15
    ),
    array(
        'base_id' => 13,
        'offset' => 5,
        'name' => 'misc',
        'value' => 5
    ),
    array(
        'base_id' => 13,
        'offset' => 7,
        'name' => 'rental',
        'value' => 170
    )
);

foreach($data as $key=>$val){
  $myArr[$val['base_id']][$val['offset']][] = $val;
}

echo '<pre>'; print_r($myArr);
?>

0
投票

试试这个

<?php

$data = array(
array(
    'base_id' => 14,
    'offset' => 1,
    'name' => 'rental',
    'value' => 200
),
array(
    'base_id' => 14,
    'offset' => 1,
    'name' => 'tax',
    'value' => 20
),
array(
    'base_id' => 14,
    'offset' => 1,
    'name' => 'misc',
    'value' => 10
),
array(
    'base_id' => 13,
    'offset' => 5,
    'name' => 'rental',
    'value' => 150
),
array(
    'base_id' => 13,
    'offset' => 5,
    'name' => 'tax',
    'value' => 15
),
array(
    'base_id' => 13,
    'offset' => 5,
    'name' => 'misc',
     'value' => 5
     ),
   array(
    'base_id' => 13,
    'offset' => 7,
    'name' => 'rental',
    'value' => 170
    )
    );



  foreach($data as $key=>$val){
 $myArr[$val['base_id'].'_'.$val['offset']][] = $val;
 }

  echo '<pre>'; print_r($myArr);

 ?>
© www.soinside.com 2019 - 2024. All rights reserved.