【问题标题】:Search in array query result in php/mysql在 php/mysql 中搜索数组查询结果
【发布时间】:2010-09-12 18:24:29
【问题描述】:

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

如何解决?

谢谢

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

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


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

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

        【解决方案3】:

        所有答案都是正确的,但为了可扩展性,这里有一个“可重复使用”的函数,它将递归地搜索更深的数组,并可以指定键及其值。它会在第一次匹配时停止并返回它的值,但同样,为了可扩展性,它可以很容易地修改为返回匹配的键/值对数组,以防出现多个结果。

        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);
        

        但是,如果您只需要针对此特定任务的搜索功能,我建议您选择发布的更简单的解决方案之一,但也许有人会在某些时候发现这很有用。

        【讨论】:

          【解决方案4】:

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

          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 数据库。

          【讨论】:

            猜你喜欢
            • 2014-11-25
            • 1970-01-01
            • 1970-01-01
            • 2012-02-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-12
            相关资源
            最近更新 更多