基于值拆分PHP数组

4
可能重复:
如何根据某个值拆分数组? 这是我想要拆分的示例数组:
(0, 1 ,2 ,3, 0, 4, 5)
我该如何拆分它成以下两个数组?
(0, 1 ,2 ,3) (0, 4, 5)
基本上,我想要检查一个元素的值是否为零,然后创建一个包含所有元素的数组,直到找到另一个零。我似乎想不出解决办法。

2
array_keys() [带搜索值] 然后 array_slice(),但我相信有更巧妙的想法。 - user557846
6个回答

5
$array = array(0, 1 ,2 ,3, 0, 4, 5);
$result = array();
$index = -1;
foreach ($array as $number) {
    if ($number == 0) {
        $index++;
    }
    $result[$index][] = $number;
}
echo print_r($result, true);

您最终将得到以下结果。
array(
    0 => array(0, 1, 2, 3),
    1 => array(0, 4, 5)
)

如果数组不以搜索值开头,则结果数组中的第一个键将为-1而非0。 - hakre

1
$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;

}

0

首先将元素连接起来,然后使用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);
}

0
<?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>";
}
?>

0

类似于注释,array_keys 可用于搜索包含您搜索的值(在此情况下为零)的所有键。

然后,您可以循环这些位置并切割数组(参见array_slice)成部分。

示例(演示):

$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;

这个变量甚至保留了原始键,例如$parts的输出:

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
        )

)

0
你可以使用 PHP explode 将字符串按照 0 的出现位置分割成字符串数组,但是我现在看到你有一个数组,而不是一个字符串。如上所建议,你可以使用相反的方法,PHP implode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接