191 Stimmen

PHP - Extrahieren einer Eigenschaft aus einem Array von Objekten

Ich habe eine Reihe von Katzen-Objekten:

$cats = Array
    (
        [0] => stdClass Object
            (
                [id] => 15
            ),
        [1] => stdClass Object
            (
                [id] => 18
            ),
        [2] => stdClass Object
            (
                [id] => 23
            )
)

und ich möchte ein Array von Katzen-IDs in 1 Zeile extrahieren (weder eine Funktion noch eine Schleife).

Ich dachte an die Verwendung von array_walk con create_function aber ich weiß nicht, wie ich es machen soll.

Irgendeine Idee?

3voto

Luke Antins Punkte 1940

CODE

<?php

# setup test array.
$cats = array();
$cats[] = (object) array('id' => 15);
$cats[] = (object) array('id' => 18);
$cats[] = (object) array('id' => 23);

function extract_ids($array = array())
{
    $ids = array();
    foreach ($array as $object) {
        $ids[] = $object->id;
    }
    return $ids;
}

$cat_ids = extract_ids($cats);
var_dump($cats);
var_dump($cat_ids);

?>

OUTPUT

# var_dump($cats);
array(3) {
  [0]=>
  object(stdClass)#1 (1) {
    ["id"]=>
    int(15)
  }
  [1]=>
  object(stdClass)#2 (1) {
    ["id"]=>
    int(18)
  }
  [2]=>
  object(stdClass)#3 (1) {
    ["id"]=>
    int(23)
  }
}

# var_dump($cat_ids);
array(3) {
  [0]=>
  int(15)
  [1]=>
  int(18)
  [2]=>
  int(23)
}

Ich weiß, es ist eine Schleife, aber es ist der einfachste Weg, es zu tun! Und mit einer Funktion endet es immer noch in einer einzigen Zeile.

3voto

woru Punkte 1420

Sie können dies ganz einfach tun mit Ouzo-Leckereien

$result = array_map(Functions::extract()->id, $arr);

oder mit Arrays (von ouzo goodies)

$result = Arrays::map($arr, Functions::extract()->id);

Sehen Sie sich das an: http://ouzo.readthedocs.org/en/latest/utils/functions.html#extract

Siehe auch funktionale Programmierung mit Ouzo (ich kann keinen Link posten).

1voto

daHormez Punkte 21
    $object = new stdClass();
    $object->id = 1;

    $object2 = new stdClass();
    $object2->id = 2;

    $objects = [
        $object,
        $object2
    ];

    $ids = array_map(function ($object) {
        /** @var YourEntity $object */
        return $object->id;
        // Or even if you have public methods
        // return $object->getId()
    }, $objects);

Ausgabe : [1, 2]

1voto

Rai Ahmad Fraz Punkte 21
// $array that contain records and id is what we want to fetch a
$ids = array_column($array, 'id');

0voto

Kiran Maniya Punkte 7004

Le site create_function() Funktion ist veraltet ab php v7.2.0 . Sie können die array_map() wie gegeben,

function getObjectID($obj){
    return $obj->id;
}

$IDs = array_map('getObjectID' , $array_of_object);

Alternativ können Sie auch array_column() Funktion, die die Werte aus einer einzelnen Spalte der Eingabe zurückgibt, die durch den Schlüssel column_key identifiziert wird. Optional kann ein index_key angegeben werden, um die Werte im zurückgegebenen Array mit den Werten aus der index_key-Spalte des Eingabe-Arrays zu indizieren. Sie können die array_column wie angegeben verwenden,

$IDs = array_column($array_of_object , 'id');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X