展开并赋值给一个多维数组

Explode and assign it to a multi-dimensional array

我在另一个 post 中找到了这段代码,我发现它很有帮助,但对我来说它只是等式的一半。根据以下代码,我需要从数据库中获取字符串,将其分解为二维数组,编辑数组中的值并将其内爆以准备以相同格式存储。所以特别是按照与现有脚本相同的顺序倒退。

来自其他post的代码>>

$data = "i love funny movies \n i love Whosebug 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>';

引用的代码插入单独的数组元素,这些元素只有 space 作为值。人们会想知道这些带来了什么好处。

您可以使用以下两个函数:

function explode2D($row_delim, $col_delim, $str) {
    return array_map(function ($line) use ($col_delim) {
        return explode($col_delim, $line);
    }, explode($row_delim, $str));
}

function implode2D($row_delim, $col_delim, $arr) {
    return implode($row_delim, 
        array_map(function ($row) use ($col_delim) {
            return implode($col_delim, $row);
        }, $arr));
}

它们是彼此相反的,并且与标准的 explodeimplode 函数非常相似,只是您需要指定两个分隔符: 一个用于分隔行,另一个用于分隔列。

以下是您将如何使用它:

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

$arr = explode2D(" \n ", " ", $data);

// manipulate data
// ...
$arr[0][2] = "scary";
$arr[2][2] = "balad";

// convert back

$str = implode2D(" \n ", " ", $arr);

repl.it 上查看 运行。