Поиск в массиве результата запроса в php / mysql

0

У меня есть результаты mysql ($date_options), как показано ниже

Array (
    [0] => stdClass Object (
        [id] => 4
        [start_date] => 2010-09-29
    )
    [1] => stdClass Object (
        [id] => 13
        [start_date] => 2010-10-06
    )
)

Мне нужно иметь возможность искать в поле "id", если какое-то значение существует. Я пробовал это, и он не работал:

array_search($event_id, $date_options, true)

$event_id имеет значение id. Я только хочу посмотреть в id, а не в start_date

Как это решить?

Спасибо

Теги:
arrays

3 ответа

6
Лучший ответ

Поскольку вы уже используете MySQL, почему бы вам не выбрать только ID, который вас интересует? Это было бы более эффективно, чем извлечение всех записей, а затем поиск в PHP.


Если вы все еще хотите это сделать, вы можете просто перебрать массив и проверить вручную:

foreach ($date_options as $result) {
  if ($result->id == $event_id) {
     // do something
  }
}
0

Все ответы являются точными, но ради расширения, здесь функция, которая "повторно используется", и она будет искать рекурсивно через даже более глубокие массивы, с возможностью указания как ключа, так и его значения. Он будет останавливаться в первом совпадении и возвращать его значение, но опять же, ради расширения, его можно было бы легко модифицировать, чтобы возвращать массив совпадающих пар ключ/значение, если ожидаются несколько результатов.

function search_my_array($my_key, $my_value, $array) {
    foreach($array as $key => $value) {
        if(!is_array($value)) {
            if(($key == $my_key) && ($value == $my_value)) {
                return $value;
            }
         } else {
             if(($result = search_my_array($my_key, $my_value, $value)) !== false) {
                return $result;
             }
         }
    }
    return false;
}

Итак, в вашем случае вы будете использовать его как:

$event = search_my_array('id', $event_id, $date_options);

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

0

Попробуйте следующее:

function searchEventForId($eventId, $dateOptions){
    foreach($dateOptions as $event){
        if($event->id === $eventId){
            return $event;
        }
    }
    return null;
}

$event = searchEventForId($event_id, $date_options);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню