Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,创建两个值完全相同的数组项的最有效方法是什么?_Php_Arrays - Fatal编程技术网

在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我发布了一个答案,绕过了你的问题-