0

好的,所以我有一个从 \n 分隔列表构造的数组。经过一些切片和切块后,我得到了我想要的数组除了数组有时有两个元素应该是一个(数组是动态的)。

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](后面的元素)变化很大,但每个 senario 的第一个单词将是相同的。如果字符串“某物”的第一个字母/数字,是否有可以检查元素的方法或函数?

对不起,如果我以一种令人困惑的方式写作!但我现在很困惑:P

感谢任何想试一试的人。

4

1 回答 1

0

没有一个就绪函数。但是您可以使用 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 回答