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

问题描述 投票:1回答:3

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

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

$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);
php arrays
3个回答
3
投票

你可以用array_fill做到这一点:

$args = array_fill(0, 2, $param);

根据您的标准,我不知道这是否比您的array_push版本更好。

这是一个完全无关紧要的问题吗?

是。完全无足轻重。如果任何两个选项之间的差异超过网络延迟的千分之一,我会感到惊讶。


3
投票

你可以这样做:

$args[]= $param;
$args[]= $param; //two times

//------------ or ------------------

$args = [0=>$param, 1=>$param];

//------------ or -----------------

$args = [$param, $param];

正如你所说,使用array_push或不同的函数......但老实说......这种方法之间没有区别。结果将在或多或少相同的执行时间内相同。


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 . '%'
]);
© www.soinside.com 2019 - 2024. All rights reserved.