PHP - 将字符串拆分为行以进行插入

时间:2017-05-15 08:15:05

标签: php arrays foreach split explode

我有以下字符串:

$ 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循环时,我是一个完整的新手

任何帮助都会很棒

3 个答案:

答案 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);