2014-01-30 120 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); 
}