23.3.2. wp_list_pluck()

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'