如何在PHP中为每次出现的字符串拆分数组

如何在PHP中为每次出现的字符串拆分数组,php,arrays,Php,Arrays,例如:我有一个以下数组$array=array(“abc”、“def”、“ghi”、“jkl”、“mno”、“abc”、“pqr”、“stu”、“vwy”、“abc”) 我需要为名为“abc”的字符串的每次出现拆分此数组。我尝试了array\u chunk对我没有帮助。使用foreach的简单方法。只需遍历数组中的所有元素,并根据条件将其拆分即可 <?PHP $array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu

例如:我有一个以下数组
$array=array(“abc”、“def”、“ghi”、“jkl”、“mno”、“abc”、“pqr”、“stu”、“vwy”、“abc”)


我需要为名为“abc”的字符串的每次出现拆分此数组。
我尝试了
array\u chunk
对我没有帮助。

使用foreach的简单方法。只需遍历数组中的所有元素,并根据条件将其拆分即可

<?PHP
$array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu", "vwy", "abc");
$acc_arra = array();
$i=0;
foreach($array as $occurrences)
{
    if($occurrences=='abc') //checking occurance
    {
        $i++;
    }
    else
    {
        if(!$acc_arra) //To start array from 0(if first element is 'abc')
        {
            $i=0;
        }
        $acc_arra[$i][]=$occurrences; //add to array
    }

}
print_r($acc_arra);

php中没有使用值拆分数组的直接函数,因此请使用foreach循环拆分数组。请查找使用值拆分数组的示例函数

<?php
$array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu", "vwy", "abc");


function splitArray($array, $value = '') {
    $returnArray = array();
    $inc = 0;
    if(is_array($array)) {
        foreach($array as $arrayValue) {
            if($value == $arrayValue) {
                $inc++;
            }
            $returnArray[$inc][] = $arrayValue;
        }
    }
    return $returnArray;
}
$finalArray = splitArray($array, 'abc');

print_r($finalArray);
?>

这里有一种方法,首先将数组元素放入字符串中。 然后可以使用正则表达式将其拆分

简单方法

<?php
$array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu", "vwy", "abc");

$string = implode(' ', $array);

$a = preg_split("/[abc]+/", $string);


print_r($a);


Array
(
    [0] =>
    [1] =>  def ghi jkl mno
    [2] =>  pqr stu vwy
    [3] =>
)
<?php
$array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu", "vwy", "abc");

$string = implode(' ', $array);

$a = preg_split("/[abc]+/", $string);

$b = array();

$d = array();

for($i = 0; $i < count($a); $i++) {
    if($a[$i] == NULL) continue;
    $b[] = $a[$i];
}
for($i = 0; $i < count($b); $i++) {

    //echo $b[$i] . PHP_EOL;

    $c = explode(' ', $b[$i]);

    for($ii = 0; $ii < count($c); $ii++) {

        if($c[$ii] == NULL) continue;
        $d[$i][] = $c[$ii];

    }
}

print_r($d);

结果会怎样?为什么不使用
foreach
?你说的“拆分数组”是什么意思?它不是字符串,所以你想将一个数组转换成两个或多个数组吗?请更新您的帖子,以显示您对代码的期望?顶级数组元素应该从0开始,而不是从1开始。否则,对我来说很好。为什么不直接将
$i
初始化为
-1
,而不是添加一个特殊情况?那么数组将从-1开始,如果第一个元素不是'abc',您是对的。我想在数组的开头总是会有
“abc”
,但我们不知道这是否可以保证。@Barmar你能看看我的答案并告诉我你的想法吗?谢谢你。
<?php
$array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu", "vwy", "abc");

$string = implode(' ', $array);

$a = preg_split("/[abc]+/", $string);

$b = array();

$d = array();

for($i = 0; $i < count($a); $i++) {
    if($a[$i] == NULL) continue;
    $b[] = $a[$i];
}
for($i = 0; $i < count($b); $i++) {

    //echo $b[$i] . PHP_EOL;

    $c = explode(' ', $b[$i]);

    for($ii = 0; $ii < count($c); $ii++) {

        if($c[$ii] == NULL) continue;
        $d[$i][] = $c[$ii];

    }
}

print_r($d);
Array
(
    [0] => Array
        (
            [0] => def
            [1] => ghi
            [2] => jkl
            [3] => mno
        )

    [1] => Array
        (
            [0] => pqr
            [1] => stu
            [2] => vwy
        )

)