2013-09-09 3 views
0

Я экспериментировал с PHP и мне было интересно, если есть простой способ для достижения этой цели:Нарезка массив на основе разделителей из другого массива

У меня есть 2 массивы:

$array1 = ('A', 'B', '$', 'C', 'D', 'E', '%', 'F', 'G', 'H', 'I', '&', 'J') 
$array2 =('$', '%', '&') 

Как может Я получаю 4 отдельных массива, которые находятся между разделителями, определенными в array2? Другими словами, я должен получить 4 массива:

('A', 'B') 
('C', 'D', 'E') 
('F', 'G', 'H', 'I') 
('J') 
+0

http://br.php.net/array_slice поможет ... –

+3

Я не думаю, что только 'array_slice' будет делать трюк. – putvande

+1

impode для строки; preg_split() на вашем наборе разделителей, затем str_split() для каждого результата –

ответ

3

Как насчет этого?

<?php 

/** 
* @author - Sephedo 
* @for - ImTryinl @ Stackoverflow 
* @question - http://stackoverflow.com/questions/18705886/splitting-an-array-based-on-delimiters-from-another-array 
*/ 

$array1 = array('A', 'B', '$', 'C', 'D', 'E', '%', 'F', 'G', 'H', 'I', '&', 'J'); 
$array2 = array('$', '%', '&'); 

$return = array(); 
$x = 0; 

foreach($array1 as $value) 
{ 
    if(in_array($value, $array2)) 
    { 
     $x++; 
    } 
    else 
    { 
     $return[$x][] = $value; 
    } 
} 

var_dump($return); 

?> 

Испытано и это возвращает

array 
    0 => 
    array 
     0 => string 'A' (length=1) 
     1 => string 'B' (length=1) 
    1 => 
    array 
     0 => string 'C' (length=1) 
     1 => string 'D' (length=1) 
     2 => string 'E' (length=1) 
    2 => 
    array 
     0 => string 'F' (length=1) 
     1 => string 'G' (length=1) 
     2 => string 'H' (length=1) 
     3 => string 'I' (length=1) 
    3 => 
    array 
     0 => string 'J' (length=1) 
+0

Простой и эффективный. – dudemanbearpig

0

Это должно работать:

function splitArrays($source, $delimiters) { 
    $result = array(); 
    $result[] = array(); 
    $resultIndex = 0; 
    foreach($source as $value) { 
     if(in_array($value, $delimiters)) { 
      $result[] = array(); 
      $resultIndex++; 
     } 
     else { 
      $result[$resultIndex][] = $value; 
     } 
    } 
} 
0

ответ здесь: http://codepad.org/dieF4Mbe

$array1 = array('A', 'B', '$', 'C', 'D', 'E', '%', 'F', 'G', 'H', 'I', '&', 'J'); 
$array2 = array('$', '%', '&'); 
$final_arrays = array(); 
$curr_array = 0; 

foreach ($array1 as $char) { 



    if (!in_array($char, $array2)) { 

     $final_arrays[$curr_array][] = $char; 

    } else { 

     $curr_array++; 
    } 
} 

print_r($final_arrays); 
0
$array1 = array('A', 'B', '$', 'C', 'D', 'E', '%', 'F', 'G', 'H', 'I', '&', 'J'); 
$array2 =array('$', '%', '&'); 
$results = array(); 

$start = 0; 
foreach($array2 as $key => $val){ 
$results[] = array_slice($array1, $start, array_search($val, $array1)-$start); 
$start = array_search($val, $array1)+1; 
} 
print_r($results); 

Выход:

Array 
(
    [0] => Array 
     (
      [0] => A 
      [1] => B 
     ) 

    [1] => Array 
     (
      [0] => C 
      [1] => D 
      [2] => E 
     ) 

    [2] => Array 
     (
      [0] => F 
      [1] => G 
      [2] => H 
      [3] => I 
     ) 

) 
1
$array1 = array('A', 'B', '$', 'C', 'D', 'E', '%', 'F', 'G', 'H', 'I', '&', 'J'); 
$array2 = array('$', '%', '&'); 

$result = array_map(
    'str_split', 
    preg_split(
     '/[' . preg_quote(implode('', $array2)) . ']/', 
     implode('', $array1) 
    ) 
); 

var_dump($result); 
Смежные вопросы