Php 创建逗号分隔字符串时arraymap与foreach循环

Php 创建逗号分隔字符串时arraymap与foreach循环,php,Php,我正在为SQL查询创建一个逗号分隔的字符串。我想知道什么是更好的arraymap或foreach循环。以下是我的两个例子: $group_ids = ""; foreach ($group_array as $group_id) { $group_ids .= $group_id . ","; } $group_ids = rtrim($group_ids, ','); vs 还是有更好的办法?还是说两者之间没有太大区别 $array = array('lastname', 'emai

我正在为SQL查询创建一个逗号分隔的字符串。我想知道什么是更好的arraymap或foreach循环。以下是我的两个例子:

$group_ids = "";
foreach ($group_array as $group_id) {
    $group_ids .= $group_id . ",";
}
$group_ids = rtrim($group_ids, ',');
vs

还是有更好的办法?还是说两者之间没有太大区别

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

这样会更有效率


效率更高

您还可以使用
内爆(“,”,$array\u of\u id)
。只需确保在使用内爆之前修剪值即可

$ids = ['foo','bar','boo'];
$ids = array_map('trim',$ids);
$ids_list = implode(',',$ids);
echo $ids_list; # foo,bar,boo

您还可以使用
内爆(“,”,$array\u of\u id)
。只需确保在使用内爆之前修剪值即可

$ids = ['foo','bar','boo'];
$ids = array_map('trim',$ids);
$ids_list = implode(',',$ids);
echo $ids_list; # foo,bar,boo

Array_-map()
foreach()
使用预先准备好的语句占位符(
rtrim(str_-repeat('?,',count($group_-Array)),','),,,')要慢得多,
Array_-map()
foreach()慢得多
使用预先准备好的语句占位符(
rtrim(str_repeat(“?,”,count($group_array)),“,”,”)
),然后使用$group_array作为绑定参数数组执行查询,效果更好,但效率更高吗?就代码而言,更容易理解。为什么要把事情复杂化?就性能而言,我预计任何差异都将以微秒为单位进行衡量。从我收集的跨层数据来看,内爆将是至少1ms的赢家,如果您需要阵列映射来清理数据,那么请使用阵列_walk继续您的生活@Sed@ProEvilz从理论上看,它的效率要高得多。这只是一个C函数调用,而不是大量的解释代码(foreach
version),或者更糟糕的是,大量的PHP函数调用(array\u map()
version)。甚至,
infrade()
在内部只生成一个最终大小的字符串,并将数组的值复制到其中。其他版本执行大量字符串分配、复制和释放。从实际的角度来看,如果数组不包含数千项,那么差异可以忽略不计。但是使用
内爆()
的代码更简洁。但是它更高效吗?就代码而言,它更容易理解。为什么要把事情复杂化?就性能而言,我预计任何差异都将以微秒为单位进行衡量。从我收集的跨层数据来看,内爆将是至少1ms的赢家,如果您需要阵列映射来清理数据,那么请使用阵列_walk继续您的生活@Sed@ProEvilz从理论上看,它的效率要高得多。这只是一个C函数调用,而不是大量的解释代码(foreach
version),或者更糟糕的是,大量的PHP函数调用(array\u map()
version)。甚至,
infrade()
在内部只生成一个最终大小的字符串,并将数组的值复制到其中。其他版本执行大量字符串分配、复制和释放。从实际的角度来看,如果数组不包含数千项,那么差异可以忽略不计。但是使用
内爆()
,代码更加清晰。虽然调用
trim()
有助于生成一个漂亮的字符串,但在这种情况下不会增加任何值。如果以这种方式生成的字符串用于在SQL查询的(…)
片段中构造
,则空格无关紧要。但是无论是否使用
trim()
,答案都是正确的。尽管调用
trim()
可以生成一个漂亮的字符串,但在这种情况下不会增加任何值。如果以这种方式生成的字符串用于在SQL查询的(…)
片段中构造
,则空格无关紧要。但是无论是否使用
trim()
,答案都是正确的。