数组到另一个在php中有空值的数组

时间:2018-01-20 08:23:48

标签: php arrays multidimensional-array implode

嗨,我是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)

3 个答案:

答案 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

<强> 参考: -

array_chunk()

foreach()

implode()

array_filter()

array_values()

答案 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 = [];
    }
}