我正在与一位同事进行代码审查,我们想知道创建数组的最有效方法,该数组中有两个都是相同的字符串。
如果我们声明一个数组和一个像这样的字符串:
$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);
但是有没有更快或更优雅的方式?
也:这是一个完全无关紧要的问题吗?我尝试使用microtime()
来计时操作,但无法获得测量结果-但也许我做错了事!
问题的更广泛的上下文是$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);
答案 0 :(得分:3)
您可以使用array_fill
来做到这一点:
$args = array_fill(0, 2, $param);
根据您的标准,我不知道这是否比您的array_push
版本更好。
这是一个完全无关紧要的问题吗?
是的。完全无关紧要。如果这两个选项之间的差异超过您的网络延迟的千分之一,那我会感到惊讶。
答案 1 :(得分:3)
您可以这样做:
$args[]= $param;
$args[]= $param; //two times
//------------ or ------------------
$args = [0=>$param, 1=>$param];
//------------ or -----------------
$args = [$param, $param];
正如您所说,使用array_push或其他函数...但是老实说,这两种方法之间没有区别。在差不多相同的执行时间内,结果将是相同的。
答案 2 :(得分:2)
您可能不需要多次插入数据。您正在使用 PDO ,可以使用分号(named parameters)来准备查询:
$query = $pdo->prepare(
'SELECT field
FROM table
WHERE
field_a = :user_input
AND field_b = :user_input
AND field_c LIKE :input_b'
);
然后将关联数组发送到execute()
方法,而不必重复参数:
$query->execute([
'user_input' => $param,
'input_b' => '%' . $param . '%'
]);