在PHP中,创建两个值完全相同的数组项的最有效方法是什么?
我正在和一位同事进行代码审查,我们想知道创建一个数组的最有效方法,该数组中包含两个相同字符串的项 如果我们声明一个数组和一个字符串,如下所示:在PHP中,创建两个值完全相同的数组项的最有效方法是什么?,php,arrays,Php,Arrays,我正在和一位同事进行代码审查,我们想知道创建一个数组的最有效方法,该数组中包含两个相同字符串的项 如果我们声明一个数组和一个字符串,如下所示: $args = []; $param = "a string"; 我们想要的结果是: print_r($args); //Array([0] => "a string" [1] => "a string") 我们的原始代码是: array_push($args, $param); array_push($args, $param); 我
$args = [];
$param = "a string";
我们想要的结果是:
print_r($args); //Array([0] => "a string" [1] => "a string")
我们的原始代码是:
array_push($args, $param);
array_push($args, $param);
我们认识到这可能更好:
array_push($args, $param, $param);
但是有没有更快捷或更优雅的方式呢
还有:这是一个完全无关紧要的问题吗?我试着用微时间来计时,但我无法测量——但也许我做错了什么
问题的更广泛背景是$args是一个参数数组,将传递到SQL查询中。我们正在wordpress中工作,查询的简化版本为:
$query = "
SELECT DISTINCT term_taxonomy_id AS 'instrument_category_id_to_show'
FROM wp_term_relationships
WHERE object_id IN(
SELECT posts.ID
FROM wp_posts posts
JOIN wp_term_relationships term_relationships
ON posts.ID = term_relationships.object_id
WHERE (posts.post_content like %s OR posts.post_title like %s)
)
AND term_taxonomy_id IN (1,2,3)
";
$sql = $wpdb->prepare($query,$args);
您可以使用数组填充来完成此操作:
我不知道按照你的标准,这是否比你的array\u push版本好
这是一个完全无关紧要的问题吗
对。完全微不足道。如果任何两个选项之间的差异超过网络延迟的千分之一,我会感到惊讶。您可以使用阵列填充:
我不知道按照你的标准,这是否比你的array\u push版本好
这是一个完全无关紧要的问题吗
对。完全微不足道。如果任何两个选项之间的差异超过网络延迟的千分之一,我会感到惊讶。您可以这样做:
$args[]= $param;
$args[]= $param; //two times
//------------ or ------------------
$args = [0=>$param, 1=>$param];
//------------ or -----------------
$args = [$param, $param];
正如你所说的,使用array_push或不同的函数。。。但老实说。。。这两种方法之间没有区别。在大致相同的执行时间内,结果将是相同的。您可以这样做:
$args[]= $param;
$args[]= $param; //two times
//------------ or ------------------
$args = [0=>$param, 1=>$param];
//------------ or -----------------
$args = [$param, $param];
正如你所说的,使用array_push或不同的函数。。。但老实说。。。这两种方法之间没有区别。在大致相同的执行时间内,结果将是相同的。您可能不需要多次插入数据。如果使用PDO,可以使用分号语法准备查询: 然后向方法发送关联数组,而不必复制参数:
$query->execute([
'user_input' => $param,
'input_b' => '%' . $param . '%'
]);
您可能不需要多次插入数据。如果使用PDO,可以使用分号语法准备查询: 然后向方法发送关联数组,而不必复制参数:
$query->execute([
'user_input' => $param,
'input_b' => '%' . $param . '%'
]);
显示你的查询构建,可以根据你使用的东西来节省时间。args[]=$param;也做同样的事情。。。但是速度更快吗?如果数组一开始是空的,为什么不直接执行$args=[$param,$param]。我无法想象其他任何解决方案的速度会更快。对于一些真正不会在性能上打破银行的东西,我总是选择从视觉角度看代码更好的东西,即可读性。但这就是我内心的艺术家=p@AndrewChart我发布了一个答案,绕过了你的问题-显示你的查询构建,可以根据你使用的东西来节省时间。args[]=$param;也做同样的事情。。。但是速度更快吗?如果数组一开始是空的,为什么不直接执行$args=[$param,$param]。我无法想象其他任何解决方案的速度会更快。对于一些真正不会在性能上打破银行的东西,我总是选择从视觉角度看代码更好的东西,即可读性。但这就是我内心的艺术家=p@AndrewChart我发布了一个答案,绕过了你的问题-