2011-06-24 13 views
11

Zakładając Mam tablicę obiektów w PHP, coś jak:Jak uzyskać właściwość obiektu z każdego obiektu w tablicy?

Array (
    [0] => stdClass Object (
      [id] => 1 
      [name] => Title One 
     )  
    [1] => stdClass Object (
      [id] => 2 
      [name] => Title Two 
     ) 

    [2] => stdClass Object (
      [id] => 7 
      [name] => Title Seven 
     ) 
) 

Jaki jest najlepszy sposób (tj najszybciej), aby uzyskać tablicę identyfikatorów? tj. array(1,2,7) Mogę ręcznie wykonywać pętlę, ale uważam, że musi istnieć lepsza metoda.

Właśnie zobaczyłem this in the similar questions, ale trwa dyskusja nad tym, czy zaakceptowana odpowiedź jest naprawdę najlepsza, a także sprzed 2 lat. Jestem na PHP 5.3.

+1

W zależności od scenariusza, możesz rozważyć użycie [tablicy asocjacyjnej] (http://php.net/manual/en/language.types.array.php) zamiast tablicy obiektów o identyfikatorze "id" 'członek. –

Odpowiedz

3

Najszybszym sposobem jest po prostu zapętlanie (foreach, for, while). Korzystanie z funkcji wywołania zwrotnego spowoduje niepotrzebne obciążenie.

Chciałbym sprawdzić, czy istnieje sposób, aby utworzyć listę za pomocą kodu, który buduje początkową tablicę obiektów.

0

Czy wypróbowałeś funkcję array_keys?

EDIT:

<?php 
    $ids = array(); 
    for($c=0; $c<count($the_array); $c++) $ids[$c] = $the_array[$c]->id; 
?> 
+0

W tym przykładzie 'tablica_keys' zwróci' [0,1,2] 'not' [1,2,7] '. Ale myślę, że mógłbym przechowywać identyfikatory jako klucze tablicy ... – DisgruntledGoat

+0

Tak, zgadza się. Myślę, że iteracja jest obowiązkowa. Jeśli nie chcesz iterować, użycie funkcji takich jak array_map zrobi to za ciebie w każdym przypadku, a to spowoduje niepotrzebny narzut związany z wywołaniem funkcji wywołania zwrotnego (jak podano przez @webbiedave). Edytuję post, dodając "oczywiste rozwiązanie". – bitfox

0

Można również użyć extract_property() który jest dobrze przetestowane biblioteki zaprojektowany specjalnie dla tej pracy (Zastrzeżenie: Jestem autorem).

0

Używam Redbean iz jakiegoś powodu przechodzącej w „getId” nie działa dla mnie, więc tutaj jest, jak ja to zrobił:

$ids = array_map(function($val){return $val->id;}, $objects); 
4

Od PHP 7.0 można wykorzystać wbudowaną funkcję array_column do tego, który pobiera tablicę wejściowych i nazwę obiektu, który chcesz zrywać:

$ids = array_column($input, 'id'); 
// array(0 => 1, 1 => 2, 2 => 7) 

Jako trzeci parametr, można ewentualnie dostarczyć indeks klucza, a także:

$ids = array_column($input, 'name', 'id'); 
// array(1 => 'Title One', 2 => 'Title Two', 7 => 'Title Seven') 

Należy pamiętać, że choć jest już dostępny w PHP 5.5.0, wsparcie dla tablicy obiektów został po raz pierwszy wprowadzony w PHP 7.0.

Powiązane problemy