在php中内爆数组的数组

  • 本文关键字:数组 php php
  • 更新时间 :
  • 英文 :


我有以下数组:

$names = [
['Joe','Moe','Joey'],
['John','Doe','Curly'],
['Jimmy','Fallon','Funny']
];

我要做的,是内爆成一个字符串,看起来像这样:

"('Joe','Moe','Joey'),('John','Doe','Curly'),('Jimmy','Fallon','Funny')"

内爆函数不能在数组的数组上工作,所以我做了以下操作,它完成了我需要的:

$strings = [];
foreach ($names as $name) {
$strings[] = '('.implode(',',$name).')';
}
$output = implode(',',$strings);

我的问题是:有没有更干净的方法来做这件事?

如果您打算在SQL查询中使用数组,那么您就错了。而不是…

  1. 准备声明
  2. 迭代数组并绑定变量
  3. 执行该语句
  4. 例如

// PDO version
$stmt = $conn->prepare("INSERT INTO tableName VALUES (?, ?, ?)");
foreach ($names as $row) {
$stmt->execute($row);
}
// MySQLi version because for some reason people keep using it
$stmt = $conn->prepare("INSERT INTO tableName VALUES (?, ?, ?)");
$stmt->bind_param("sss", $a, $b, $c);
foreach ($names as [ $a, $b, $c ]) {
$stmt->execute();
}

原答案

implode()array_map()的组合应该可以工作

$output = implode(",", array_map(function($row) {
return sprintf("(%s)", implode(",", array_map(function($name) {
return "'$name'";
}, $row)));
}, $names));

这包括单引号是每个名称和包装每组括号。

Demo ~ https://3v4l.org/PLu1g

当您在foreach循环中修改数据时,这是一种代码气味。通常你可以用减速器,映射或类似的东西来代替。这使得你的代码更容易理解

$result = array_map( function($item) {
return "('" . implode( "','", $item) . "')";
}, $names );
$result = '"'.implode( ',', $result ).'"';

如果重复使用此代码,请将其放入返回该字符串的函数或方法中。

最新更新