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`
我有以下字符串:
$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`