如果下一个数组元素包含单词的一部分,则合并数组中的两个元素

时间:2013-05-10 11:53:58

标签: php arrays elements

好的,所以我有一个我从一个单独的列表构建的数组。 经过一些切片和切割,我得到了我想要的阵列 除了数组有时有两个元素应该是一个(数组是动态的)。

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

感谢任何想要试一试的人。

1 个答案:

答案 0 :(得分: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'));
?>