2013-03-07 63 views
2

基本上,我有一個數組中有多個字符串作爲值(不是關聯數組)。我需要獲取每個字符串的特定部分,並將其轉換爲具有兩個值的數組。如何將數組中的字符串分解爲更多數組PHP

這裏是我的陣列結構:

$data = array(
"A1 -- B1", 
"A2 -- B2", 
"A3 -- B3", 
"A1 -- A2", 
"A2 -- A3", 
"B2 -- B3", 
"B1 -- B3", 
); 

所以我需要每個值,成爲一個數組,像這樣:

$data = array(
    array("A1", "B1"); 
    array("A2", "B2"); 
    ... 
); 

我一直在思考如何使用preg_split打破各串下來,但無法讓它在一個數組中工作。不確定preg_split是最好的方式,所以我願意接受建議。

感謝

回答

4

嘗試:

foreach($data as $k => $c){ 
    $data[$k] = explode(" -- ", $c); 
} 
1

試試這個:

$data = array(
"A1 -- B1", 
"A2 -- B2", 
"A3 -- B3", 
"A1 -- A2", 
"A2 -- A3", 
"B2 -- B3", 
"B1 -- B3", 
); 

$res    = array(); 
foreach($data as $key=>$val){ 
    $res[$key] = explode(" -- ",$val); 
} 

echo "<pre>"; 
print_r($res); 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => A1 
      [1] => B1 
     ) 

    [1] => Array 
     (
      [0] => A2 
      [1] => B2 
     ) 

    [2] => Array 
     (
      [0] => A3 
      [1] => B3 
     ) 

    [3] => Array 
     (
      [0] => A1 
      [1] => A2 
     ) 

    [4] => Array 
     (
      [0] => A2 
      [1] => A3 
     ) 

    [5] => Array 
     (
      [0] => B2 
      [1] => B3 
     ) 

    [6] => Array 
     (
      [0] => B1 
      [1] => B3 
     ) 

) 
+0

請解釋-1 – 2013-03-07 11:04:04

+1

爲什麼人們失望票,即使不看答案嗎? – 2013-03-07 11:06:21

+0

爲什麼當你只需要使用兩個循環,創建不必要的臨時變量,並在不需要時使用trim()? @Wayne Whitty的答案是正確的做法。 – 2013-03-07 11:09:37

0
$data = array(
"A1 -- B1", 
"A2 -- B2", 
"A3 -- B3", 
"A1 -- A2", 
"A2 -- A3", 
"B2 -- B3", 
"B1 -- B3", 
); 

$new = array(); 
foreach($data as $d){ 
$new[] = split(" -- ", $d); 
} 

var_dump($new); 

給出:

array 
    0 => 
    array 
     0 => string 'A1' (length=2) 
     1 => string 'B1' (length=2) 
    1 => 
    array 
     0 => string 'A2' (length=2) 
     1 => string 'B2' (length=2) 
... etc 
+0

'split()'是當你需要一個正則表達式時,你不需要它。你只需要使用'explode()' – 2013-03-07 11:10:52

0

試試這個:

$newArray = array(); 
foreach($data as $key=>$value) 
{ 
    $expArray = explode(' -- ', $value); 
    $newArray[] = array($expArray[0], $expArray[1]); 
} 

$newArray 

是最後的數組。

我希望這會有所幫助。

0

無論如何,我只是加入答案,因爲我已經準備好了。

我還創建了一個自定義foreach循環遍歷數組中的每個項目,然後將該項目(如果它是一個字符串)拆分成一個數組。

你也可以花費我寫的函數來允許遞歸。例如,如果不是數組中的所有項都是字符串,但是如果某些項也是包含字符串的數組,則需要explode,則需要遞歸。

但是我離開了這出在這exampe:

http://codepad.viper-7.com/xYjXur


<?php 

function splitStringInArrayToArray ($delimiter = ' -- ', array $array) 
{ 
    foreach ($array as &$item) 
    { 
     if (is_array ($item)) 
      throw new Exception("oh noes, problem"); 

     $item = explode ($delimiter, $item); 
    } 

    return $array; 
} 

$data = array(
"A1 -- B1", 
"A2 -- B2", 
"A3 -- B3", 
"A1 -- A2", 
"A2 -- A3", 
"B2 -- B3", 
"B1 -- B3" 
); 

$new = splitStringInArrayToArray (' -- ', $data); 

echo '<pre>'; 
print_r($new); 
echo '</pre>'; 
0
Try: 
$result_array=array(); 

foreach($data as $val){ 
    $ex = explode(" -- ", $val); 
    array_push($result_array,$ex); 
} 

print_r($result_array);