2014-01-30 53 views
4

我想爆炸一個字符串兩次,並製作一個多維數組。PHP爆炸並將其分配給一個多維數組

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 
$data = explode("\n", $data); 

所以print_r($data);將輸出:

Array 
(
    [0] => i love funny movies 
    [1] => i love stackoverflow com 
    [2] => i like rock song 
) 
現在

,如果我這樣做:

$line_data = explode(" ", $data); // explode $data variable by spaces. 

一個print_r($line_data);會給我這樣的:

Array 
(
    [0] => i 
    [1] => love 
    [2] => funny 
    [3] => movies 
    [4] => 
    [5] => i 
    [6] => love 
    [7] => stackoverflow 
    [8] => dot 
    [9] => com 
    [10] => 
    [11] => i 
    [12] => like 
    [13] => rock 
    [14] => song 
) 

但什麼我想要才達到看起來就像這樣:這裏

Array 
(
    [0][0] => i 
    [0][1] => love 
    [0][2] => funny 
    [0][3] => movies 
    [0][4] => 
    [1][5] => i 
    [1][6] => love 
    [1][7] => stackoverflow 
    [1][8] => dot 
    [1][9] => com 
    [1][10] => 
    [2][11] => i 
    [2][12] => like 
    [2][13] => rock 
    [2][14] => song 
) 

,第一指標應該代表行號和第二個索引將代表字號碼。
如何爆炸字符串有這樣的數組?

回答

2

首先,explode字符串由換行符。現在你有一個數組。遍歷這個數組的值和每個空間的值。下面的代碼不正是這樣:

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 
$data = explode("\n ", $data); 
$num = 0; 
foreach($data as &$val){ 
$exp = explode(" ", $val); 
$val = array_combine(range($num, $num+sizeof($exp)-1), $exp); 
$num += sizeof($exp); 
} 
print_r($data); 

array_searcharray_slice替代解決方案:

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 
$data = explode(" ", $data); 
$arr = array(); 
while($search = array_search("\n", array_values($data))){ 
$arr[] = array_merge(array_slice($data, 0, $search, true), array("")); 
$data = array_slice($data, $search+1, null, true); 
} 
$data = array_merge($arr, array($data)); 
print_r($data); 

的輸出將是:

Array 
(
    [0] => Array 
     (
      [0] => i 
      [1] => love 
      [2] => funny 
      [3] => movies 
      [4] => 
     ) 

    [1] => Array 
     (
      [5] => i 
      [6] => love 
      [7] => stackoverflow 
      [8] => dot 
      [9] => com 
      [10] => 
     ) 

    [2] => Array 
     (
      [11] => i 
      [12] => like 
      [13] => rock 
      [14] => song 
     ) 

) 
+0

一個'的print_r($ d);'會給你這個'陣列 ( [0] => [1] =>我 [2] =>像 [3] => rock [4] =>歌曲 )' – rakibtg

+0

它應該是'print_r($ data);'。 –

+0

感謝男人很酷..;) – rakibtg

1
$line_data = array(); 
foreach($data as $key => $d){ 
    $line_data[$key] = explode(' ', $d); 
} 
1

嘗試

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 
$data = explode("\n", $data); 
for($i=0;$i<count($data);$i++){ 
$data[$i] = explode(" ",$data[$i]); 
} 

演示here

1

您可以使用此解決方案,而無需使用爆炸:

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 

    $line_data = explode(" ", $data); 

    $arrayLines = []; 

    for($i = 0, $j = 0; $i < count($line_data); $i++) { 
    if($line_data[$i] != "\n") { 
     $arrayLines[$j][$i] = $line_data[$i]; 
    } else { 
     $arrayLines[$j][$i] = $line_data[$i]; 
     $j++; 
    } 
    } 

    print_r($arrayLines); 
5

做它:

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; 
$data = explode(" \n ", $data); 

$out = array(); 
$step = 0; 
$last = count($data); 
$last--; 

foreach($data as $key=>$item){ 

    foreach(explode(' ',$item) as $value){ 
    $out[$key][$step++] = $value; 
    } 

    if ($key!=$last){ 
    $out[$key][$step++] = ' '; // not inserting last "space" 
    } 

} 

print '<pre>'; 
print_r($out); 
print '</pre>'; 

OUTPUT(你需要什麼):

Array 
(
    [0] => Array 
    (
     [0] => i 
     [1] => love 
     [2] => funny 
     [3] => movies 
     [4] => 
    ) 

[1] => Array 
    (
     [5] => i 
     [6] => love 
     [7] => stackoverflow 
     [8] => dot 
     [9] => com 
     [10] => 
    ) 

[2] => Array 
    (
     [11] => i 
     [12] => like 
     [13] => rock 
     [14] => song 
    ) 

) 
0

如果你李磕它快速和骯髒的:

foreach($data = explode("\n",$data) as &$d) { 
    $d = explode(' ',$d); 
}