好的,所以我有一个我从一个单独的列表构建的数组。 经过一些切片和切割,我得到了我想要的阵列 除了数组有时有两个元素应该是一个(数组是动态的)。
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
感谢任何想要试一试的人。
答案 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'));
?>