PHP分解并将其分配给多维数组

PHP分解并将其分配给多维数组,php,arrays,multidimensional-array,explode,Php,Arrays,Multidimensional Array,Explode,我想把一个字符串分解两次,然后做一个多维数组 $data = "i love funny movies \n i love stackoverflow dot com \n i like rock song"; $data = explode("\n", $data); 所以aprint\u r($data)将输出: Array ( [0] => i love funny movies [1] => i love stackoverflow com [

我想把一个字符串分解两次,然后做一个多维数组

$data = "i love funny movies \n i love stackoverflow dot com \n i like rock song";
$data = explode("\n", $data);
所以a
print\u 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.
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
)
a
print\u r($line\u 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
)
但我想要实现的是这样的:

$line_data = explode(" ", $data); // explode $data variable by spaces.
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
)
这里,第一个索引应表示行号,第二个索引将表示字号。
如何将字符串分解成这样的数组?

首先,按换行符将字符串分解。现在你有了一个数组。按空间迭代此数组的值和每个值。下面的代码正是这样做的:

$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
(
    [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
        )

)
试一试

$data=“我喜欢有趣的电影\n我喜欢stackoverflow.com\n我喜欢摇滚歌曲”;
$data=分解(“\n”,$data);

对于($i=0;$i),您可以使用此解决方案,而无需使用explode:

   $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);
$data=“我喜欢有趣的电影\n我喜欢stackoverflow.com\n我喜欢摇滚歌曲”;
$line_data=explode(“,$data”);
$arrayLines=[];
对于($i=0,$j=0;$i
去做:

$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>';

如果你喜欢又快又脏:


print\u r($d);
会给你这个
数组([0]=>1]=>i[2]=>像[3]=>rock[4]=>song)
应该是
print\r($data);
@voodoo417谢谢你指出它。请看我更新的答案。$step变量没有用,你可以用这个符号附加到数组的末尾:
$out[$key][]=$value;
@cornegigouille兄弟,嫌犯,你还没有得到这个时刻。请在debug/trace/等下尝试plz。逐步了解它的工作原理以及“为什么没有$out[$key][]=$value;”。干杯
$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>';
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
    )

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