我有以下字符串:
$ string = John Smith - Clearner - 1234 $ Bob Dillan - IT Man - 2453242 $ Sarah Clifford - Admin - 32423423
我需要将每个人的名字,职业,注册号码分成3个单独的列到MySQL中,每个人都用“' $'分隔。
期望的结果:
Col1 | Col2 | COL3
约翰史密斯| Clearner | 1234
Bob Dillan | IT人| 2453242
莎拉克利福德|管理员| 32423423现在我相信我们需要两次将字符串分解为' $'和' - '
我设法分裂了' $'通过执行以下操作:
$peeps = explode("$", $string);
foreach($peeps as $peep) {
$persons .= $peep;
}
$pnames = explode(' - ',$persons);
但是当谈到爆炸和foreach循环时,我是一个完整的新手
任何帮助都会很棒
答案 0 :(得分:0)
给定您的字符串,您可以使用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使用它超出了这个问题的范围。
答案 1 :(得分:0)
尝试
`$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`
答案 2 :(得分:-2)
我会在MySQL中这样做
UPDATE [table]
SET
[col1] = SPLIT_STR([col], '$', 1),
[col2] = SPLIT_STR([col], '$', 2),
[col3] = SPLIT_STR([col], '$', 3);