2013-05-30 186 views
0

如果我有字符串:爆炸陣列

123 + 0456 + 1789 + 2,

我明白我可以執行以下操作:

$test = 123+0,456+1,789+2,; 
$test = explode(",", $test); 

這產生了','之間的每個部分的數組。

我該如何在該區域的每個部分爆炸'+'?我如何訪問它?

我知道這可能是一個非常簡單的問題,但是我所嘗試過的一切都失敗了。

謝謝。

+0

[數學之前分割一個字符串]可能的重複(http://stackoverflow.com/questions/16794313/splitting-a-string-before-math) – andrewsi

回答

3

爲什麼不再使用爆炸?這次使用「+」而不是「,」作爲分隔符:

$test = 123+0,456+1,789+2,; 
$test = explode(",", $test); 

foreach($test as $test_element){ 
    $explodedAgain = explode("+", $test_element); 
    var_dump($explodedAgain); 
} 
0

當爆炸字符串時,會返回一個數組。在你的情況下,$test是一個數組。所以你需要遍歷該數組來訪問每個部分。

foreach($test as $subtest){ 

} 

在上面的循環中,每個部分現在被列爲$subtest。然後,您可以使用explode再次爆炸$subtest以按'+'拆分字符串,這將再次返回一個數組。然後你可以使用這些位。

一個完整的例子是:

$test = 123+0,456+1,789+2,; 
$test = explode(",", $test); 

foreach($test as $subtest){ 
    $bits= explode("+", $subtest); 
    print_r($bits); 
} 
2
$test = "123+0,456+1,789+2,"; 
$test2 = explode(",", $test); 
foreach($test2 as &$v) { 
    $v=explode("+", $v); 
} 

這個包裝箱一個多維數組,你可以訪問它這樣說:

$test2[1][0]; // =456 
+0

+1爲指針解決方案 – zessx

0

添加到您的代碼:

$newArr = array(); 
foreach($test as $v) 
{ 
    $newArr[] = explode('+', $v); 
} 

$newArr現在是一個包含您的數字的數組數組。

0
preg_match_all('/((\d+)\+(\d)),+/', $test, $matches); 
var_export($matches); 

array (
    0 => 
    array (
     0 => '123+0,', 
     1 => '456+1,', 
     2 => '789+2,', 
    ), 
    1 => 
    array (
     0 => '123+0', 
     1 => '456+1', 
     2 => '789+2', 
    ), 
    2 => 
    array (
     0 => '123', 
     1 => '456', 
     2 => '789', 
    ), 
    3 => 
    array (
     0 => '0', 
     1 => '1', 
     2 => '2', 
    ), 
) 

主要部分是在$匹配[1](由分割 「」) - 下鍵1個分割結果是在$匹配[2] [1]和$匹配[3] [1]