Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于值的PHP分割数组_Php_Array Splice - Fatal编程技术网

基于值的PHP分割数组

基于值的PHP分割数组,php,array-splice,Php,Array Splice,可能重复: 下面是我要拆分的示例阵列: (0,1,2,3,0,4,5) 我如何像这样将其拆分为2个数组 (0,1,2,3) (0,4,5) 基本上我想检查一个元素的值是否为零,然后创建一个包含所有元素的数组,直到找到另一个零为止。我似乎找不到解决方案。对于0的每个外观,您可以使用将其分解为字符串数组,但现在我看到您有一个数组,而不是字符串。正如上面所建议的,您可以使用相反的 您将以以下内容结束。 array( 0 => array(0, 1, 2, 3), 1 =>

可能重复:

下面是我要拆分的示例阵列:

(0,1,2,3,0,4,5)

我如何像这样将其拆分为2个数组

(0,1,2,3) (0,4,5)

基本上我想检查一个元素的值是否为零,然后创建一个包含所有元素的数组,直到找到另一个零为止。我似乎找不到解决方案。

对于0的每个外观,您可以使用将其分解为字符串数组,但现在我看到您有一个数组,而不是字符串。正如上面所建议的,您可以使用相反的

您将以以下内容结束。

array(
    0 => array(0, 1, 2, 3),
    1 => array(0, 4, 5)
)

首先连接元素,然后使用
0
进行拆分,然后通过前缀
0
再次将它们分开,例如下面

$concatenatedStr = implode(',', $array);
$indx = 0;
$fragments = array();
$fragementStrings= explode("0,", $concatenatedStr);
foreach($fragementStrings as $fragementString) {
  //you get your fragements here 
  $fragments[$indx++][] = explode(",", "0,".$fragementString);
}

类似于注释,可用于搜索包含您搜索的值的所有键(本例中为零)

然后,可以在这些位置上循环,并将阵列(请参见)分割为多个部分

示例():

此变体甚至保留原始密钥,示例性
$parts
输出:

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
            [3] => 3
        )

    [1] => Array
        (
            [4] => 0
            [5] => 4
            [6] => 5
        )

)

另一种选择可能类似于概述的其他一些答案。以下变体也会保留关键点:

输出():


array_keys()[带搜索值]然后array_slice(),但我确信其中一个作为一个更好的idea如果数组不是以搜索值开始的,那么结果数组中的第一个键将是-1而不是0。
$x = -1;
$newArr = array();
$array = array(0,1,2,3,0,4,5,6);

foreach ($array as $key => $value) {
  if($value == 0) 
    $x++;

  $newArr[$x][] = $value;

}
<?php
$a=array(0, 1 ,2 ,3, 0, 4, 5);
$b =array();
$k=-1;
foreach($a as $key=>$val)
{
    if($val==0)
    {
      $k++;  
    }

    $b[$k][]=$val;
}


echo"<pre>";



print_r($b[0]);

print_r($b[1]);


foreach($b as $key=>$val)
{
    echo"<pre>";
    echo $val;
    echo"</pre>";
}
?>
$keys  = array_keys($array, 0);
$parts = [];
$last  = 0;

foreach ($keys as $key)
{
    $last !== $key 
        && $parts[] = array_slice($array, $last, $key - $last, true);    
    $last = $key;
}

$parts[] = isset($key) ? array_slice($array, $key, null, true) : $array;
array(2) {
  [0] => array(4) {
    [0] => int(0)
    [1] => int(1)
    [2] => int(2)
    [3] => int(3)
  }
  [1] => array(3) {
    [4] => int(0)
    [5] => int(4)
    [6] => int(5)
  }
}
$array = [0, 1 ,2 ,3, 0, 4, 5];
$parts = [];
$index = 0;

foreach ($array as $key => $number)
{
    $number == 0 and $key and $index++;
    $parts[$index][$key] = $number;
}
Array
(
    [0] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 2
            [3] => 3
        )

    [1] => Array
        (
            [4] => 0
            [5] => 4
            [6] => 5
        )

)