2013-05-10 73 views
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](元件以下)改变了很多,但为每个塞纳里奥的第一个词将是相同的。 有没有一种方法或函数可以检查元素,如果字符串“东西”的第一个字母/数字?

对不起,如果我以混乱的方式写作!但我现在很困惑:P

感谢任何人想给它一个镜头。

+0

所以你想要遍历整个数组。如果'$ array [4] ==='something''和'$ array [4 + 1] ==='something else''然后将'$ array [4]'与'$ array [5]'合并,但是否则什么都不做? – 2013-05-10 12:00:22

+0

嘿@ user2369834! 是否可以看到原来的\ n分隔列表?也许从这里开始会更容易。 – ljubiccica 2013-05-10 12:31:41

回答

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')); 
?> 
+0

感谢您的评论和时间!学了一个新东西, ! :D 但我解决了这个问题的另一种方式: 在我身上发现,数组结构将总是显示时间元素,然后我可能需要合并两个数组元素。 因此,while循环麻烦阵列我可以检查 $ string = array [$ i-2]; if(is_numeric($ string [0])){//合并元素并取消其中之一} 会粘贴代码,但它现在很马虎和不整洁:P – user2369834 2013-05-11 11:25:32

相关问题