0

私はPHPを試していますが、これを達成する簡単な方法があるかどうか疑問に思っていました:

私は2つの配列を持っています:

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

array2 で定義された区切り文字の間にある 4 つの個別の配列を取得するにはどうすればよいですか? つまり、4 つの配列を取得する必要があります。

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

5 に答える 5

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)
于 2013-09-09T20:00:09.050 に答える
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);
于 2013-09-09T20:20:11.403 に答える
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;
        }
    }
}
于 2013-09-09T20:01:07.307 に答える
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
        )

)
于 2013-09-09T20:06:41.407 に答える
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);
于 2013-09-09T20:01:48.637 に答える