2013-09-05 2 views
3

У меня есть массив объектов из класса Volume. Я ищу лучший способ вернуть свойство _description с учетом значения _id (метод accessor - get_description).PHP - Поиск массива объектов

В приведенном ниже примере я бы предоставил «vol-e123456a3», и он вернет «сервер E: том».

[0] => Volume Object 
     (
      [_snapshot_count:protected] => 16 
      [_id:protected] => vol-e123456a3 
      [_description:protected] => server E: volume 
      [_region:protected] => us-east-1 
      [_date_created:protected] => DateTime Object 
       (
        [date] => 2013-04-06 10:29:41 
        [timezone_type] => 2 
        [timezone] => Z 
       ) 

      [_size:protected] => 100 
      [_state:protected] => in-use 
     ) 
+0

Что вы подразумеваете под «лучшим способом», вы что-то пытаетесь? –

+2

Взгляните на это сообщение: http://stackoverflow.com/questions/4742903/php-find-entry-by-object-property-from-a-array-of-objects – Robbert

+0

Самый эффективный способ – kernelpanic

ответ

0

Попробуйте это,

$_id="vol-e123456a3"; 
foreach($objArray as $obj) 
{ 
    if($obj->_id==$_id) 
    { 
     return isset($obj->_description) ? $obj->_description : ""; 
    } 
} 
0

вы можете использовать следующую функцию; элементы данных отмечены как защищенные, поэтому для доступа к ним с публичной стороны вам придется использовать методы accesor, которые вы не указали. Я поместил предположение с самым распространенным возможным именем accesor.

function getValue($object_array, $filter) { 
    foreach ($object_array as $object) 
     if ($object->getId() == $filter) return $object->getDescription(); 
    return false; 
} 

вызов его со следующим Params

$description = getValue($objects, 'vol-e123456a3'); 

, если нет общественной методы доступа нам нужно будет использовать отражение. следующим образом

function getValue($object_array, $filter) { 
    foreach ($object_array as $object) { 
     $class = new ReflectionClass($object); 
     $prop = $class->getProperty('_id')->getValue($object); 
     if ($prop == $filter) return $class->getProperty('_description')->getValue($object) 
    } 
    return false; 
} 
+0

Я не глядя на любые 'getId()' и 'getDescription()'. –

+0

прочитайте мой текст вначале – DevZer0

+0

Вы указали, но вы также должны указать 'имя методов' –

Смежные вопросы