2011-03-11 99 views
0

我有一个看起来像下面的数组,我想检查下一个elem是否以一个空格开始,如果是,将它连接到前一个elem。php数组迭代和连接

[1] => Array (
    [1] => lenny/volatile/main Packages 
    [2] => lenny/volatile/main Packages 
    [3] => lenny/volatile/main Sources 
    [4] => Reading package 
    [5] => lenny/volatile/main Sources 
) 

Output: 

[1] => Array (
    [1] => lenny/volatile/main Packages 
    [2] => lenny/volatile/main Packages 
    [3] => lenny/volatile/main Sources Reading package 
    [5] => lenny/volatile/main Sources 
) 

谢谢!

+0

正是我一直在寻找。谢谢大家! – Darrow11 2011-03-11 21:12:02

回答

3
$count = count($array); 
for($i = 0; $i < $count; $i++){ 
    if($array[$i][0] == ' '){ 
     if($i > 0){ 
      $array[$i-1] .= $array[$i]; 
      unset($array[$i]) 
     } 
    } 
} 

应该这样做(即如果你的数组被命名为$array,否则它满足你的需求)

+1

他不希望以空格开头的项目被删除;他希望他们追加到前一个项目。 – Matchu 2011-03-11 20:52:25

+0

ahhhhh ha。解决它我去。没有直接读取 – Neal 2011-03-11 20:53:39

+0

我修正了它与正确的执行 – Neal 2011-03-11 20:54:48

1

一个办法做到这一点检出PHP demo

//your starting array 
$myarray = array("lenny/volatile/main Packages","lenny/volatile/main Packages", "lenny/volatile/main Sources", " Reading package", "lenny/volatile/main Sources"); 

$mystring = implode(",", $myarray); //implode array into a string delimited by , 
echo $mystring.PHP_EOL.PHP_EOL; //debug 

$mystring = str_replace(", ", ' ', $mystring); //str replace all ", " with ' ' 
echo $mystring.PHP_EOL.PHP_EOL; //debug 

$result= explode(',',$mystring); //explode back into an array with delimiter ',' 
print_r($result); //should give you final result 

输出结果@迈克尔:

lenny/volatile/main Packages,lenny/volatile/main Packages,lenny/volatile/main Sources, Reading package,lenny/volatile/main Sources 

lenny/volatile/main Packages,lenny/volatile/main Packages,lenny/volatile/main Sources Reading package,lenny/volatile/main Sources 

    Array 
    (
     [0] => lenny/volatile/main Packages 
     [1] => lenny/volatile/main Packages 
     [2] => lenny/volatile/main Sources Reading package 
     [3] => lenny/volatile/main Sources 
    ) 
+1

可爱:)原始迭代可能明显更快,但我喜欢简单。 – Matchu 2011-03-11 20:58:18

+0

@matchu我喜欢少线,D谢谢。使它更干净w/comment – kjy112 2011-03-11 20:58:42

+0

我可能看起来错了,但爆炸无能为力,你只是通过一个空间去除所有的东西。我猜你要替换“‘用’,”(双单空间) – Michael 2011-03-11 21:31:42

1

@manitor你忘了把值添加到previo我们排在删除之前。

应该读这样的:

for($i = 0; $i < count($array); $i++){ 
    if($array[$i][0] == ' '){ 
     $array[$i-1].= $array[$i]; 
     unset($array[$i]); 
    } 
} 
0

这是完全未经测试的代码,但它可能让你在正确的轨道上。我会遍历数组中的每一个。如果它很酷,请将它添加到新阵列中。如果没有连接到前一个节点。我添加了一个指针,以便您的索引将保持打包在新数组中。

//$my_array already full of stuff 
$new_array = array(); 
$pointer = 0; 
for($i = 0; $i < count($my_array); $i++) { 
    if($i == 0) { 
     $new_array[$pointer] = $my_array[$i]; 
    } else { 
     $string = $my_array[$i]; 
     if(substr($string, 0, strlen($string) - 1) == ' ') { 
      $new_array[$pointer - 1] .= $string; 
     } else { 
      $new_array[$pointer] = $string; 
     } 
    } 
    $pointer++; 
} 
0

尝试了一些异国情调的东西,只是为了好玩;)试图使用最少量的行来让它工作。

阵列:

$myAr = Array(
    0 => "lenny/volatile/main Packages", 
    1 => "lenny/volatile/main Packages", 
    2 => "lenny/volatile/main Sources", 
    3 => " Reading package", 
    4 => "lenny/volatile/main Sources", 
); 

函数调用&逻辑(将丢弃该字符串是没有先前项)

array_walk($myAr, 'concat', &$myAr); 

function concat($item, $key, $ar) { 
if(preg_match("/^(\s+)(.*)/", $item, $matches) == 1) { 
    unset($ar[$key]); 
    if (isset($ar[--$key])){ 
    $ar[$key] .= $matches[0]; 
    } 
} 
} 

结果:

var_dump($myAr); 

array(4) { 
    [0]=> string(28) "lenny/volatile/main Packages" 
    [1]=> string(28) "lenny/volatile/main Packages" 
    [2]=> string(43) "lenny/volatile/main Sources Reading package" 
    [4]=> string(27) "lenny/volatile/main Sources" 
} 
1

这将创建一个新的数组你想要的方式:

$target = array(array_shift($array)); 
$to = 0; 
foreach($array as $string) { 
    if($string[0] === ' ') { 
     $target[$to] .= $string; 
    } 
    else { 
     $target[] = $string; 
     $to++; 
    } 
} 

DEMO