在PHP中,创建两个值完全相同的数组项的最有效方法是什么?

时间:2018-06-29 15:39:20

标签: php arrays

我正在与一位同事进行代码审查,我们想知道创建数组的最有效方法,该数组中有两个都是相同的字符串。

如果我们声明一个数组和一个像这样的字符串:

$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);

3 个答案:

答案 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 . '%'
]);