嗨,我是php的新手,我想转换这个数组
Array(
[0] =>
[1] => 2
[2] => 6
[3] => 7
[4] =>
[5] => 1
[6] => 5
[7] => 6
[8] =>
[9] => 1
[10] => 3
[11] => 5)
我在索引0,4,8处有空的价值 到另一个数组,如
Array([0] => 2,6,7
[1] => 1,5,6
[2] => 1,3,5)
答案 0 :(得分:2)
第一种方式 如果您想根据空值进行分组,但它们位于randome索引
$new_array = [];
$data = '';
foreach($array as $key=>$arr){
if($arr == ''){
if($key >0){
$new_array[] = trim($data,',');
$data = '';
}
}else{
$data .= ','.$arr;
}
}
$new_array[] = trim($data,',');
print_r($new_array);
输出: - https://eval.in/938714
第二路 如果您想根据空值进行分组,并且它们位于顺序索引,如0,4,8,12 ......
$array = array_chunk($array,4);
foreach($array as &$arr){
$arr = trim(trim(implode(',',$arr),','));
}
print_r($array);
输出: - https://eval.in/938698
第3路。 如果您想根据空值进行分组,并且它们位于0,4,8,12等连续索引处...(另一种方法)
$array = array_chunk(array_values(array_filter($array)),3);
foreach($array as &$arr){
$arr = implode(',',$arr);
}
print_r($array);
输出: - https://eval.in/938692
<强> 参考: - 强>
答案 1 :(得分:1)
短implode()
+ preg_split()
解决方案:
使用扩展输入数组:
$arr = ['', '', 2, 6, 7, '', '', 1, 5, 6, 8, 9, '', 1, 3, 5, 7, '', 10, 11, ''];
$result = preg_split('/,,+/', trim(implode(',', $arr), ','));
print_r($result);
输出:
Array
(
[0] => 2,6,7
[1] => 1,5,6,8,9
[2] => 1,3,5,7
[3] => 10,11
)
答案 2 :(得分:0)
遇到''
时,只需制作一个子阵列并将之前的非空数组附加到结果中。的 Demo 即可。
这只需花费O(n)
$result = [];
$sub = [];
foreach($array as $v){
if($v != ''){
$sub[] = $v;
}else{
if(count($sub)) // avoid continus ''
$result[] = $sub;
$sub = [];
}
}