在数组查询结果中搜索php / mysql

时间:2010-09-12 18:24:29

标签: php mysql arrays

我有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

如何解决这个问题?

由于

4 个答案:

答案 0 :(得分:6)

由于您已经在使用MySQL,为什么不选择您感兴趣的ID?这比检索所有记录然后用PHP搜索更有效。


如果你仍然想这样做,你可以简单地迭代数组并手动检查:

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

答案 1 :(得分:0)

试试这个:

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

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

答案 2 :(得分: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);

我建议你选择一个更简单的解决方案,如果你只需要这个特定任务的搜索功能,但也许有人会发现这在某些方面很有用。

答案 3 :(得分:0)

这是经过测试的,您可以尝试,我已经在我的一个项目中使用过

function FindData($fKey, $find_val, $res) {
        $arr = $res;//json_decode($res, true);
        foreach ($arr as $key => $value) {
            if ($value[$fKey] == $find_val) {
                return $value;
            }
        }
    }

示例:

$row = FindData('KeyName', 'Value', 'ArrayData or mySql Result Set');

它不会每次都访问MySQL数据库以获取普通数据。