In Version 3.7.0 wurde die Funktion wp_list_pluck()
eingeführt. Kaum jemand kennt sie, dabei ist sie unglaublich nützlich. Das Wort pluck bedeutet auf Deutsch: herausziehen. Und genau das tut die Funktion auch: sie zieht einen Wert aus einem Array heraus und erzeugt dabei ein neues Array.
So sieht sie aus:
function wp_list_pluck( $list, $field, $index_key = null ) {
...
}
Es gilt:
- $list (array)
Ein Array von Arrays (oder Objekten) - $field (string|int)
Der Schlüssel des Arrays oder der Objekt-Parameter dessen Wert durch das eigentlichen Array/Objekt ersetzt werden soll. - $index_key (string|int)
Der Schlüssel des Arrays oder der Objekt-Parameter der als neuer Index für das neu entstehende Array benutzt werden soll.
Hört sich alles komplizierter an, als es eigentlich ist. Sehen wir uns deshalb ein Beispiel an.
Beispiel 1:
Nehmen wir an, wir haben folgende JSON-Datei content.json
:
[
{
"id": 456,
"title": "Test 1",
"content": "Dies ist Test 1."
},
{
"id": 457,
"title": "Test 2",
"content": "Dies ist Test 2."
},
{
"id": 458,
"title": "Test 3",
"content": "Dies ist Test 3."
},
{
"id": 459,
"title": "Test 4",
"content": "Dies ist Test 4."
},
{
"id": 460,
"title": "Test 5",
"content": "Dies ist Test 5."
}
]
Im Grunde ist in der Datei ein Array mit fünf Objekten gespeichert.
Wenn wir nun alle id
-Werte haben wollen, müssten wir das Array durchlaufen. Zum Beispiel mittels foreach
und ein neues Array füllen. Doch wp_list_pluck()
nimmt uns diese Arbeit ab:
<?php
function get_object_ids() {
$content_text = file_get_contents( 'content.json' );
$content_arr = json_decode( $content_text );
return wp_list_pluck( $content_arr, 'id' );
}
var_dump( get_object_ids() );
?>
Gibt folgendes aus:
array (size=5)
0 => int 456
1 => int 457
2 => int 458
3 => int 459
4 => int 460
Beispiel 2:
Nehmen wir an, wir wollen alle Werte aus title
haben. Dazu möchten wir, dass die Array-Schlüssel im neuen Array dem Wert, der in id
definiert ist, entspricht:
<?php
function get_object_ids() {
$content_text = file_get_contents( 'test.json' );
$content_arr = json_decode( $content_text );
return wp_list_pluck( $content_arr, 'title', 'id' );
}
var_dump( get_object_ids() );
?>
Gibt folgendes aus:
array (size=5)
456 => string 'Test 1'
457 => string 'Test 2'
458 => string 'Test 3'
459 => string 'Test 4'
460 => string 'Test 5'