0

わかりましたので、\n で区切られたリストから作成した配列があります。いくつかのスライスとさいの目に切った後、配列を希望どおりに取得しましたが、配列には1つの要素が2つある場合があります(配列は動的です)。

array (size=9)
 0 => string 'BMC305' 
 1 => string '14:15' 
 2 => string 'OneData'  //this should be in the same element
 3 => string 'SecondData' //as this one.
 4 => string ' '

 5 => string 'BMC305' 
 6 => string '14:15' 
 7 => string 'OnlyData' //here there is only one so it's fine.
 8 => string ' ' 

要素 [4] と [8] (次の要素) は大きく変わりますが、各シナリオの最初の単語は同じになります。文字列の最初の文字/数字が「何か」の場合、要素をチェックできるメソッドまたは関数はありますか?

わかりにくい書き方ですみません!しかし、私は今かなり混乱しています:P

やりたい人はよろしくお願いします。

4

1 に答える 1

0

準備ができている関数は 1 つではありません。ただし、array_filter を使用して、開始点がある配列キーを見つけることができます。次に、スプ​​ライスでチャンクします。

<?php

$array1 = array(
    0 => 'BMC305',
    1 => '14:15',
    2 => 'OneData',
    3 => 'SecondData',
    4 => ' ',
    5 => 'BMC305',
    6 => '14:15',
    7 => 'OnlyData',
    8 => ' ');

function findStartElement($var) {
    return strpos($var, 'BMC') === 0;
}

$startElements = array_filter($array1, 'findStartElement');

$chunks = array();
$previousKey = null;
foreach ($startElements as $key => $value) {
    if ($previousKey !== null) {
        $chunks[] = array_splice($array1, $previousKey, $key - $previousKey);
    }

    $previousKey = $key;
}
// get remaining part.
$chunks[] = $array1;

var_dump($chunks);
?>

また、PHP 5.3 を使用している場合は、ここでクロージャーを使用して実にすばらしいことを行うことができます。

<?php

function chunkByValue($array, $value) {
    $startElements = array_filter($array, function ($var) use ($value) {
                return strpos($var, $value) === 0;
            });

    $chunks = array();
    $previousKey = null;
    foreach ($startElements as $key => $value) {
        if ($previousKey !== null) {
            $chunks[] = array_splice($array, $previousKey, $key - $previousKey);
        }

        $previousKey = $key;
    }
    // get remaining part.
    $chunks[] = $array;

    return $chunks;
}

$array1 = array(
    0 => 'BMC305',
    1 => '14:15',
    2 => 'OneData',
    3 => 'SecondData',
    4 => ' ',
    5 => 'BMC305',
    6 => '14:15',
    7 => 'OnlyData',
    8 => ' ');

var_dump(chunkByValue($array1, 'BMC'));
?>
于 2013-05-10T12:23:12.583 に答える