Получение значения поля из массива объектов по ключу внутри объекта

Это очень глупый вопрос, и я не могу поверить, что спрашиваю о чем-то простом.

Я использую db->get['table']->result() для получения данных из таблицы.

Схема таблицы выглядит так: table(id, col1, col2).

db->get['table']->result() возвращает что-то вроде этого (print_r):

Array
(
[0] => stdClass Object
    (
        [id] => 1
        [col1] => "id 1 col 1"
        [col2] => "id 1 col 2"
    )

[1] => stdClass Object
    (
        [id] => 2
        [col1] => "id 2 col 1"
        [col2] => "id 2 col 2"
    )

[2] => stdClass Object
    (
        [id] => 3
        [col1] => "id 3 col 1"
        [col2] => "id 3 col 2"
    )
}

Теперь мне нужно получить значение col2 из строки с id = 2, я хочу сделать это без цикла foreach.

Я думал, что могу сделать это так:

$valueThatINeed = $myArray[2]->col2;

Это неправильно, и я знаю, почему это неправильно.

Вопрос в том, как напрямую получить то, что мне нужно, без цикла?


person Kamil    schedule 27.10.2012    source источник


Ответы (2)


Хм, вы, вероятно, могли бы использовать array_uintersect с функцией обратного вызова, которая сравнивает только свойство $id, но это немного неуклюже и, вероятно, не быстрее, чем простой цикл for.

Возможно, нам следует подойти к этому с другой точки зрения... Вероятно, самый эффективный способ найти нужную запись — запустить запрос SELECT в базе данных — в конце концов, это именно то, для чего оптимизированы базы данных, тем более что столбец id будет индексируется (при условии, что id является первичным ключом).

Исходный пост:

Я предполагаю, что это не так просто, как:

$valueThatINeed = $myArray[2]->$col2;

person xSphere    schedule 27.10.2012
comment
это не так, потому что это что-то вроде этого: $valueThatINeed = $myArray[array_index]->otherArray где array_index начинается с 0 и не равен идентификатору таблицы. - person Kamil; 27.10.2012
comment
Было ощущение, что этого не будет;) Я исправлю свой ответ, включив в него еще одно предложение. - person xSphere; 27.10.2012
comment
Первоначальная идея заключалась в обычном запросе с соединениями. Мои попытки можно увидеть здесь: stackoverflow.com/questions/13054474/ Затем я попытался объединиться в PHP, а не в sql, и построить дерево в PHP, потому что возвращаемые данные не были в объективном формате, просто записи. Я беспокоился о большом foreach, который портит производительность. Может быть, я вернусь к этому запросу и обработаю его в цикле и все равно построю дерево из запроса... - person Kamil; 28.10.2012

person    schedule
comment
1. Можете ли вы сделать его более понятным? 2. Мои идентификаторы уникальны, невозможно получить несколько результатов. 3. Является ли это более эффективным, чем поиск id по циклу? - person Kamil; 27.10.2012
comment
Похоже, в PHP 5 я не могу написать что-то вроде этого: function($arrayValue) use($ID), или я не могу поместить туда тело функции. - person Kamil; 27.10.2012