PHP - 将字符串拆分成行以便插入

PHP - Split string into rows for insert

我有以下字符串:

$string=John Smith - Clearner - 1234$Bob Dillan - IT Man - 2453242$Sarah Clifford - 管理员 - 32423423

我需要将每个人的姓名、职业、注册号分成 3 个单独的列 MySQL,每个人用 '$' 分隔

想要的结果:

第 1 栏 |列2 | Col3

约翰·史密斯 |清洁剂 | 1234

鲍勃·迪伦 |资讯达人 | 2453242

莎拉·克利福德 |管理员 | 32423423

现在我认为我们需要用“$”和“-”将字符串展开两次

我通过执行以下操作成功拆分了“$”:

$peeps = explode("$", $string);
foreach($peeps as $peep) {
$persons .= $peep;
}
$pnames = explode(' - ',$persons);

但是在展开和 foreach 循环方面我完全是个新手

任何帮助都会很棒

我会在 MySQL

中这样做
UPDATE [table]
SET
 [col1] = SPLIT_STR([col], '$', 1),
 [col2] = SPLIT_STR([col], '$', 2),
 [col3] = SPLIT_STR([col], '$', 3);

给定您的字符串,您可以使用 array_map

以简单的方式对其进行修改
$string="John Smith - Clearner - 1234$Bob Dillan - IT Man - 2453242$Sarah Clifford - Admin - 32423423"

如果foreach太难掌握,因为你必须修改你正在遍历的数组,试试函数式的方法,也许它会更简单。

explode,如您所知,创建一个用分隔符拆分输入字符串的数组:

$partial= explode("$", $string);

将导致

$partial= [ 
  "John Smith - Clearner - 1234",
  "Bob Dillan - IT Man - 245324",
  "Sarah Clifford - Admin - 32423423"
];

您可以使用 array_map 对数组中的每个元素应用相同的转换。转换被编码为辅助函数:

function detail_splitter($string) {
    return explode(" - ", $string)
}

可以用作

$result =array_map(detail_splitter, $partial);

结果将是:

$result = [ 
  ["John Smith", "Clearner", "1234"],
  ["Bob Dillan", "IT Man", "245324"],
  ["Sarah Clifford", "Admin", "32423423"]
];

这是一个数组的数组。数组的每个元素都由辅助函数处理并拆分为一个三元素数组。结果用于创建一个新数组,其中包含准备进一步处理的已处理值。

显然,您可以将这些步骤组合成一个语句:

$result = array_map( 
    function ($p) { return explode(" - ", $p); },
    explode("$", $string);
);

从现在开始,您不必进一步转换数组,而是为每个可以恢复为 foreach 的数组元素执行一个任务。

请注意,我将参数名称从 $string 更改为 $p 以避免弄乱范围(对于 php 就好了,人类程序员有时不在轻松隐藏变量名称)。

有一个函数 array_walk 可以对数组的每个元素执行任务,但我认为使用简单的 foreach 这个任务会更容易。

你可以这样称呼不同的人:

// $dbc is your db connection
$sql = "INSERT INTO yourtable VALUES (?,?,?);
foreach($result as $person) {
    $stmt = $dbc->prepare($sql);
    $stmt->bind_param('s', $person[0]);
    $stmt->bind_param('s', $person[1]);
    $stmt->bind_param('s', $person[2]);
    $stmt->execute();
} 

我对你的 sql 陈述做了一些假设,但我猜 mysql 使用它超出了这个问题的范围。

尝试

`$person_array = array(); $i=0;

$peeps = explode("$", $string);

foreach ($peeps as $peep) {
$persons = explode("-", $string);

foreach ($persons as $person) {

$person[$i]['name'] = $person[0]; 
$person[$i]['occupation'] = $person[1]; 
$person[$i]['number'] = $person[2]; 
$i++;

}   // inner each loop

}   // Outer each loop`