数组到 php 中具有空白值的另一个数组
Array to another array with blank values in php
嗨,我是新手 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)
第一种方式 如果你想根据空值分组但它们是随机索引
$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);
第二种方式 如果你想根据空值进行分组并且它们位于顺序索引处,如 0,4,8,12 ...
$array = array_chunk($array,4);
foreach($array as &$arr){
$arr = trim(trim(implode(',',$arr),','));
}
print_r($array);
第三种方式。 如果您想根据空值进行分组并且它们位于顺序索引处,如 0、4、8, 12...(另一种方法)
$array = array_chunk(array_values(array_filter($array)),3);
foreach($array as &$arr){
$arr = implode(',',$arr);
}
print_r($array);
参考:-
短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
)
当遇到''
时,只需创建一个子数组并将先前的非空数组附加到结果。 Demo。
这只花费 O(n)
$result = [];
$sub = [];
foreach($array as $v){
if($v != ''){
$sub[] = $v;
}else{
if(count($sub)) // avoid continus ''
$result[] = $sub;
$sub = [];
}
}
嗨,我是新手 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)
第一种方式 如果你想根据空值分组但它们是随机索引
$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);
第二种方式 如果你想根据空值进行分组并且它们位于顺序索引处,如 0,4,8,12 ...
$array = array_chunk($array,4);
foreach($array as &$arr){
$arr = trim(trim(implode(',',$arr),','));
}
print_r($array);
第三种方式。 如果您想根据空值进行分组并且它们位于顺序索引处,如 0、4、8, 12...(另一种方法)
$array = array_chunk(array_values(array_filter($array)),3);
foreach($array as &$arr){
$arr = implode(',',$arr);
}
print_r($array);
参考:-
短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
)
当遇到''
时,只需创建一个子数组并将先前的非空数组附加到结果。 Demo。
这只花费 O(n)
$result = [];
$sub = [];
foreach($array as $v){
if($v != ''){
$sub[] = $v;
}else{
if(count($sub)) // avoid continus ''
$result[] = $sub;
$sub = [];
}
}