Ограничение максимального количества результатов поиска

#php

Вопрос:

У меня есть файл php, связанный с xml-файлом, с рядом ссылок. Моя цель состоит в том, чтобы ограничить максимальное количество результатов поиска, отображаемых при вводе в поле поиска. Например, чтобы получить только 8 или 10 результатов. Я не знаю, с чего начать. Как я могу это сделать?.

php файл

 <?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("links.xml");

$x=$xmlDoc->getElementsByTagName('link');

//get the q parameter from URL
$q=$_GET["q"];

//lookup all links from the xml file if length of q>0
if (strlen($q)>0) {
  $hint="";
  for($i=0; $i<($x->length); $i  ) {
    $y=$x->item($i)->getElementsByTagName('title');
    $z=$x->item($i)->getElementsByTagName('url');
    if ($y->item(0)->nodeType==1) {
      //find a link matching the search text
      if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
        if ($hint=="") {
          $hint="<a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        } else {
          $hint=$hint . "<br /><a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        }
      }
    }
  }
}

// Set output to "no suggestion" if no hint was found
// or to the correct values
if ($hint=="") {
  $response="no suggestion";
} else {
  $response=$hint;
}

//output the response
echo $response;
?> 

Комментарии:

1. Добавьте переменную счетчика. Увеличьте значение для каждой ссылки, которую вы читаете из xml-файла. Когда вы дойдете до 8 (или 10) ссылок, прекратите чтение результатов из файла.

2. Спасибо @Phaelax z. Вы имеете в виду редактирование этого php-кода выше? или мне следует добавить эти переменные счетчика в xml?. Пожалуйста, не могли бы вы показать мне?. Я новичок в этом деле.

Ответ №1:

Мое понимание проблемы заключается в том, что вы хотите ограничить количество hints возвращаемых данных из поиска. Вы не пытаетесь остановить поиск, а скорее просто ограничить вывод?

Изменения, которые я внес, должны превратиться $hint в массив, затем в нижней части кода, который он будет использовать array_slice , чтобы начать с первой позиции и вернуться $amountToShow . Добавление элемента в $hint выполняется sprintf исключительно для удобства чтения.

 <?php

$xmlDoc = new DOMDocument();
$xmlDoc->load("links.xml");

$x = $xmlDoc->getElementsByTagName('link');

//get the q parameter from URL
$q = $_GET["q"];
$hint = [];

//lookup all links from the xml file if length of q>0
if (strlen($q) > 0) {
    for ($i = 0; $i < ($x->length); $i  ) {
        $y = $x->item($i)->getElementsByTagName('title');
        $z = $x->item($i)->getElementsByTagName('url');
        if ($y->item(0)->nodeType == 1) {
            //find a link matching the search text
            if (stristr($y->item(0)->childNodes->item(0)->nodeValue, $q)) {
                $hint[] = sprintf(
                    "<a href='%s' target='_blank'>%s</a>",
                    $z->item(0)->childNodes->item(0)->nodeValue,
                    $y->item(0)->childNodes->item(0)->nodeValue
                );
            }
        }
    }
}

// Set output to "no suggestion" if no hint was found
// or to the correct values
$amountToShow = 10;
if (count($hint) == 0) {
    echo "no suggestion";
} else {
    echo implode("", array_slice($hint, 0, $amountToShow));
}
 

Комментарии:

1. Большое спасибо вам @hppycoder, просто и понятно. Это решило проблему. Будь благословен.