在输入中具有这样形成的数组:
Array
(
[0] => 10
[1] => -1
[2] => -1
[3] => -1
[4] => -1
[5] => 15
[6] => 16
[7] => 17
[8] => -1
[9] => -1
[10] => 20
)
我如何将它拆分为 -1 值,并输出这样的内容:
Array
(
[0] => 10
[1] => Array
(
[0] => 15
[1] => 16
[2] => 17
)
[2] => Array
(
[0] => 20
)
)
php
explode()
函数适用于字符串输入。虽然这里有一些数组的东西。
1 <?php
2 $array = [10, -1, -1, -1, -1, 15, 16, 17, -1, -1, 20];
3 $tempArray = [];
4 $result = [];
5 foreach($array as $item)
6 {
7 if($item == -1)
8 {
9 if(count($tempArray))
10 {
11 $result[] = $tempArray;
12 $tempArray = [];
13 }
14 }
15 else
16 $tempArray[] = $item;
17
18 }
19 if(count($tempArray))
20 {
21 $result[] = $tempArray;
22 }
23 echo json_encode($result);
结果是,
~$ php cal.php
[[10],[15,16,17],[20]]
这就是您的解决方案。
$myAry = array(
'0' => 10,
'1' => -1,
'2' => -1,
'3' => -1,
'4' => -1,
'5' => 15,
'6' => 16,
'7' => 17,
'8' => -1,
'9' => -1,
'10' => 20
);
$newAry = Array();
function splitArray($ary , $index){
global $newAry;
if($index == count($ary)){
return $newAry;
}
if( $ary[$index] != -1 ){
$chunk = array();
while( $index < count($ary) && $ary[$index] != -1 ){
array_push($chunk , $ary[$index]);
$index++;
}
array_push($newAry , $chunk);
splitArray($ary , $index);
} else {
$index++;
splitArray($ary , $index);
}
}
splitArray($myAry , 0);
print_r($newAry);
输出:
Array (
[0] => Array ( [0] => 10 )
[1] => Array ( [0] => 15 [1] => 16 [2] => 17 )
[2] => Array ( [0] => 20 )
)
使用
array_unique
和 unset
的结果并不完全相同
$array = array_unique($array);
foreach ($array as $k=>$item) {
if($item == '-1'){
unset($array[$k]);
}
}
输出
array(5) {
[0]=>
int(10)
[5]=>
int(15)
[6]=>
int(16)
[7]=>
int(17)
[10]=>
int(20)
}
为了避免繁琐的结果数组元素计数和跟踪结果索引,只有在没有声明引用时才将引用推送到结果数组中。当遇到 -1 值时,销毁引用,以便遇到下一个限定值,它进入一个新组。 演示
$array = [10, -1, -1, -1, -1, 15, 16, 17, -1, -1, 20];
$result = [];
foreach ($array as $v) {
if ($v === -1) {
unset($ref);
continue;
}
if (!isset($ref)) {
$result[] =& $ref;
}
$ref[] = $v;
}
var_export($result);
输出:
array (
0 =>
array (
0 => 10,
),
1 =>
array (
0 => 15,
1 => 16,
2 => 17,
),
2 =>
array (
0 => 20,
),
)