Вернуть несколько значений (переменных) с PHP

Привет! Я работаю над функцией, которая должна возвращать набор результатов базы данных И время, затраченное на запрос, чтобы получить данные. Работает хорошо, но я не знаю, как вернуть время и набор результатов и сделать их доступными в представлении. Спасибо за помощь.

Мой код выглядит так:

public function getNumResults($term) {

   /* Count query Execution */
   $starttime = microtime(true);

   $query = $this->con->prepare("SELECT COUNT(*) as total
       FROM sites WHERE title LIKE :term
       OR url LIKE :term
       OR keywords LIKE :term
       OR description LIKE :term");

   $endtime = microtime(true);

   /* Calculates total time taken */
   $duration = $endtime - $starttime;

   $searchTerm = "%". $term . "%";
   $query->bindParam(":term", $searchTerm);
   $query->execute();

   $row = $query->fetch(PDO::FETCH_ASSOC);

   return $row["total"];

}

В представлении я возвращаю набор результатов так:

<div class="mainResultSection">
        <?php
          $resultsProvider = new SearchResultsProvider($con);
          $numResults = $resultsProvider->getNumResults($term);
          /* Not working */
          $timeResults = $resultsProvider->getNumResults($term)->duration;
          echo "<p class='resultsCount'>$numResults results found. In $timeResults <p>";
        ?>
      </div>

3 ответа

Решение

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

/* Time to get results */
public function getTimeResult($term){
   $query = $this->con->prepare("SELECT COUNT(*) as total
        FROM sites WHERE title LIKE :term
        OR url LIKE :term
        OR keywords LIKE :term
        OR description LIKE :term"
   );

   $searchTerm = "%". $term . "%";
   $query->bindParam(":term", $searchTerm);

   $starttime = microtime(true);
   $query->execute();
   $endtime = microtime(true);

   /* Calculates total time taken */
   $duration = $endtime - $starttime;

   return $duration;
}

Вам нужно вернуть массив. Может быть, просто добавьте его в $row, Кроме того, вам нужно получить время начала до запроса и получить время окончания после:

   //other code

   $starttime = microtime(true);
   $query->execute();
   $endtime = microtime(true);
   $row = $query->fetch(PDO::FETCH_ASSOC);
   $row["duration"] = $endtime - $starttime;

   return $row;

Или для вашего текущего кода вы можете просто добавить его в переменную объекта:

   $this->duration = $endtime - $starttime;

Затем доступ с помощью:

   $timeResults = $resultsProvider->duration;

Вы не можете вернуть две переменные в функции PHP, функция возвращает только одно значение, но я знаю, что есть три способа вернуть несколько значений, я опубликую 3 примера для каждого из них

1. Список PHP:

    function retmulti()
    {
        return array(4,5,6);
    }

    list($a,$b,$c) = retmulti();

2. Используйте массив:

    function retmulti()
    {
        return array(1,2,3);
    }

    $array = retmulti();
    $a = $array[1];
    $b = $array[2];
    $c = $array[3];

3. Используйте класс

    class newClass
    {
        public $a;
        public $b;
        public $c;
    }

    function retmulti()
    {
        $retobj = new newClass();

        $retobj->a = 4;
        $retobj->b = 5;
        $retobj->c = 6;

        return $out;
    }
    $abc = retmulti();
    $a= $abc->a;
    $b = $abc->b;
    $c = $abc->c;
Другие вопросы по тегам