有个数组类似于下面这样,数组是以bill_id来排序的,所以相同bill_id的会在邻近的元素
Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 13.4600
) [1] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 9.8200
) [2] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 10.0600
) [3] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 9.9400
) [4] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.6000
) [5] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.4400
) [6] => Array
(
[in_id] => 566
[bill_id] => YT090114
[wgt] => 5.3000
)
)in_id是相同的,这个数组就是根据in_id来获取到的
现在想将这个数组弄成类似以下面这种
Array
(
[0] => Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 13.4600
)
[1] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 9.8200
)
)
[1] => Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 10.0600
)
[1] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 9.9400
)
[2] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.6000
)
[3] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.4400
)
)
[2] => Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090114
[wgt] => 5.3000
)
)
)也就是把相同bill_id的分到同一数组中,并且如果相同的bill_id超过10个的话,则第11个起的10个在另一个数组中,依次类推有什么比较好的方法吗??
我想的是弄一个循环,将数组的[0]元素中的bill_id取出来,放在循环外,然后添加数组[0]到循环外的一个新数组
然后循环从数组[1]开始,和数组外的存放的bill_id进行比较,如果一样,则添加到和数组[0]相同的数组,添加前判断此数组长度是否超过10,如果超过则添加到一个新的数组
如果不同,则修改循环外的bill_id为自身的bill_id,然后添加到循环外新数组中的另一个元素,但苦于PHP新手...编程写了半天达不到想像中的效果...
Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 13.4600
) [1] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 9.8200
) [2] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 10.0600
) [3] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 9.9400
) [4] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.6000
) [5] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.4400
) [6] => Array
(
[in_id] => 566
[bill_id] => YT090114
[wgt] => 5.3000
)
)in_id是相同的,这个数组就是根据in_id来获取到的
现在想将这个数组弄成类似以下面这种
Array
(
[0] => Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 13.4600
)
[1] => Array
(
[in_id] => 566
[bill_id] => YT090116
[wgt] => 9.8200
)
)
[1] => Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 10.0600
)
[1] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 9.9400
)
[2] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.6000
)
[3] => Array
(
[in_id] => 566
[bill_id] => YT090120
[wgt] => 6.4400
)
)
[2] => Array
(
[0] => Array
(
[in_id] => 566
[bill_id] => YT090114
[wgt] => 5.3000
)
)
)也就是把相同bill_id的分到同一数组中,并且如果相同的bill_id超过10个的话,则第11个起的10个在另一个数组中,依次类推有什么比较好的方法吗??
我想的是弄一个循环,将数组的[0]元素中的bill_id取出来,放在循环外,然后添加数组[0]到循环外的一个新数组
然后循环从数组[1]开始,和数组外的存放的bill_id进行比较,如果一样,则添加到和数组[0]相同的数组,添加前判断此数组长度是否超过10,如果超过则添加到一个新的数组
如果不同,则修改循环外的bill_id为自身的bill_id,然后添加到循环外新数组中的另一个元素,但苦于PHP新手...编程写了半天达不到想像中的效果...
但只验证了一下...数据库中没有现成可以模拟的数据...还得填充...$j = 0; $k = 0;
$print_info = array();
$print_info[$j][$k] = $old_arr[0];
$bill_id = $old_arr[0]['bill_id'];for($i = 1; $i <count($old_arr);$i++) {
if($old_arr[$i]['bill_id'] != $bill_id) {
$bill_id = $old_arr[$i]['bill_id'];
$j += 1; $k = 0;
} else if(count($print_info[$j]) == 10) {
$j += 1; $k = 0;
} else {
$k += 1;
}
$print_info[$j][$k] = $old_arr[$i];
}
foreach($old_arr as $row) {
$out[$row['bill_id'][] = $row;
}
print_r($out);如果不想用 bill_id 做主键,则再
$out = array_slice($out, 0);
foreach($old_arr as $row)
{
$out[$row['bill_id']][] = $row;
}
$out_copy = $out;
foreach($out as $key=>$array)
{
if(count($array) > 10)
{
$out_final[$key][1] = array_splice($out[$key],0,10);
$out_final[$key][2] = array_splice($out_copy[$key],10,(count($array)+1));
}else
{
$out_final[$key] = $array;
}
}echo "<pre>";
print_r($out_final);
echo "</pre>";
等会看看那测试不行的数据是怎么回事
不过你说的$out = array_slice($out, 0);不起作用
用$out = array_splice($out,0);才可以
foreach($old_arr as $row) {
$out[$row['bill_id'][] = $row;
} $r = array_map('foo', $out);function foo($ar) {
return array_chunk($ar, 10);
}
foreach ($a as $v){
eval("\$check = \$v{'bill_id'};");
(!in_array($check, $buffer) || count($res[$i]) == 10) && $buffer[$i++] = $check;
$res[$i][] = $v;
}
print_r ($res);