2013-09-02 3 views
2

Eg: У меня есть следующий массив
$array = array("abc","def","ghi", "jkl", "mno", "abc", "pqr", "stu", "vwy", "abc");Как разделить массив для каждого вхождения строки в PHP

И мне нужно разделить этот массив для каждого вхождения строки называется "abc" я попытался array_chunk не помог для меня ..

+2

Что бы результат? Почему бы не использовать 'foreach'? – zerkms

+0

Что вы имеете в виду с «split the array» Это не строка, так что вы хотите превратить один массив в два или более массивов? Обновите свой пост, чтобы показать, что вы ожидаете от кода. –

+0

http://www.php.net/manual/en/function.array-count-values.php? – iiro

ответ

6

Простой способ использование 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); 

ВЫВОД

Array 
(
    [0] => Array 
     (
      [0] => def 
      [1] => ghi 
      [2] => jkl 
      [3] => mno 
     ) 

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

) 
+1

Элементы массива верхнего уровня должны начинаться с 0, а не 1. В противном случае, это выглядит хорошо. – Barmar

+0

Ответ обновлен .. :) –

+0

Почему бы не просто инициализировать '$ i'' '' 'вместо добавления специального случая? – Barmar

1

Там нет прямой функции в PHP, чтобы разбить массив с использованием значений, поэтому, пожалуйста, используйте цикл Еогеасп для разделения массива. Пожалуйста, найдите образец функции для разделения массива с использованием значений.

<?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); 
?> 
1

Это способ сделать это, сначала получив элементы массива в строку. Затем вы можете разбить его с помощью регулярного выражения.

Простой способ

<?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] => 
) 

комплекс Way

<?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 
     ) 

) 
Смежные вопросы