Ich mache eine Codeüberprüfung mit einem Kollegen und wir möchten wissen, wie ein Array mit zwei Elementen, die beide dieselbe Zeichenfolge enthalten, am effizientesten erstellt werden kann.
Wenn wir ein Array und einen String wie folgt deklarieren:
$args = [];
$param = "a string";
Und wir wollen das Ergebnis:
print_r($args); //Array([0] => "a string" [1] => "a string")
Der ursprüngliche Code, den wir hatten, war:
array_push($args, $param);
array_push($args, $param);
Wir haben erkannt, dass dies besser sein kann:
array_push($args, $param, $param);
Aber gibt es einen schnelleren oder eleganteren Weg?
Auch: Ist das eine völlig triviale Frage? Ich habe versucht, die Operation mit microtime()
zeitlich festzulegen, und ich kann keine Messung durchführen - aber vielleicht mache ich etwas falsch!
Der weitere Kontext des Problems besteht darin, dass $args
ein Array von Parametern ist, die an eine SQL-Abfrage übergeben werden. Wir arbeiten in WordPress und eine vereinfachte Version der Abfrage lautet:
$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 Antworten
Sie können dies mit array_fill
tun:
$args = array_fill(0, 2, $param);
Ich weiß nicht, ob dies nach Ihren Maßstäben besser ist als Ihre array_push
Version.
Ist das eine völlig triviale Frage?
Ja. Völlig trivial. Wenn der Unterschied zwischen zwei Optionen mehr als ein Tausendstel Ihrer Netzwerklatenz beträgt, wäre ich erstaunt.
Das kannst du machen:
$args[]= $param;
$args[]= $param; //two times
//------------ or ------------------
$args = [0=>$param, 1=>$param];
//------------ or -----------------
$args = [$param, $param];
Wie Sie sagten, gibt es bei array_push oder anderen Funktionen ... aber ehrlich gesagt ... keinen Unterschied zwischen diesen Methoden. Das Ergebnis ist in mehr oder weniger derselben Ausführungszeit dasselbe.
Möglicherweise müssen Sie Daten nicht mehrmals einfügen. Wenn Sie PDO verwenden, können Sie Ihre Abfrage mit der Semikolonsyntax vorbereiten (benannte Parameter):
$query = $pdo->prepare(
'SELECT field
FROM table
WHERE
field_a = :user_input
AND field_b = :user_input
AND field_c LIKE :input_b'
);
Senden Sie dann ein assoziatives Array an die execute()
Methode, ohne dass dies erforderlich ist Dupliziere die Argumente:
$query->execute([
'user_input' => $param,
'input_b' => '%' . $param . '%'
]);
Verwandte Fragen
Neue Fragen
php
PHP ist eine weit verbreitete, übergeordnete, dynamische, objektorientierte und interpretierte Skriptsprache, die hauptsächlich für die serverseitige Webentwicklung entwickelt wurde. Wird für Fragen zur PHP-Sprache verwendet.