我已经困惑了好几个小时了。所以,我有这个数组
$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
)
)
);
如何实现?
解决办法是,
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>';
这是现场演示
迭代您的数据并检查 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);
没有 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;
}
试试这个 -
<?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);
?>
试试这个
<?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);
?>