Как эффективно разбить PHP-массив на страницы?

#php #jquery #ajax #arrays #pagination

#php #jquery #ajax #массивы #разбивка на страницы

Вопрос:

У меня есть массив, который в настоящее время разбит на страницы с помощью параметров URL (например . …. php?page=2amp;blah= blopamp;glob= gloo).

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

Как мне настроить это так, чтобы мне не нужно было перезагружать страницу и только один раз читать из XML-файла?

Я довольно новичок в PHP, поэтому, пожалуйста, потерпите меня. После небольшого исследования я подумал, что Ajax подходит для этого? Пожалуйста, поправьте меня, если я ошибаюсь. Я пытался узнать кое-что о разбивке на страницы с помощью Ajax, но самые полезные вещи, которые я нашел, были для разбивки данных на страницы из базы данных mysql, а не для массива объектов.

Кто-нибудь может предоставить какие-либо указания? Я горю желанием учиться.

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

1. Если вы не используете какой-либо кэш в памяти (memcached), вам придется читать XML-файл (или его локально сохраненную версию) каждый раз, когда вам нужно больше данных из него. Вас действительно беспокоит время взаимодействия с сервером <-> xml или время взаимодействия с браузером <-> сервером?

2. Моя самая большая проблема здесь — разбиение на страницы на одной странице без загрузки страницы. Это мобильное приложение, поэтому я хочу, чтобы интерфейс был максимально упрощен!

Ответ №1:

Когда мне это нужно, я создаю функцию кэширования, которая либо А) загружает XML из исходного источника, а затем сохраняет его в папке кэша, либо Б) загружает его из папки кэша, если он существует, и соблюдены другие критерии (например, свежесть).

На одном сайте, который должен был извлекать данные с довольно медленного сервера, я поместил A) в задание cron и всегда считывал данные из кэша для веб-сайта.

Если вам нужна разбивка на страницы больших данных, вот хороший пример: http://net.tutsplus.com/tutorials/php/how-to-paginate-data-with-php /

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

1. Спасибо за советы по кэшированию Matt. Источник XML будет редко меняться, так что это хорошая идея. Что касается разбивки на страницы, я уже закодировал свою собственную разбивку на страницы PHP, но я хочу избавиться от загрузки страниц, как мне это сделать?

2. Мэтт Х описывает файловый кэш. В основном выполняйте a file_get_contents('url to XML') только в случае file_exists('path to cache file') сбоя. В противном случае вы file_get_contents('path to cache file') .

3. Если вы хотите полностью избавиться от загрузки страниц, используйте приведенный ниже ответ (AJAX) от @imkingdavid. Вы можете загружать каждую страницу с помощью AJAX-запроса или загружать все данные сразу, скажем, в массив JSON, и создавать представление страницы по запросу. JSON подходит, если у вас конечный объем данных, в противном случае используйте комбинацию загрузок AJAX для нескольких страниц одновременно, хранящихся в объекте JSON.

Ответ №2:

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

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

1. Большинство источников, которые я нашел, относятся к классу разбивки на страницы, который специально предназначен для использования с MySQL :-/

2. Это может быть сделано специально для MySQL, но оно должно быть адаптируемым для использования с другими типами хранения данных (например, XML). Можете ли вы ссылаться на класс?

Ответ №3:

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

Кроме того, вы можете сохранить его в другом, более быстром формате (может json быть?) и разделить его на файлы — по одному файлу для каждой страницы — и читать файл только для нужной вам страницы.

Если файл зависит от пользователя, другим вариантом будет сохранить его в сеансе (если он не слишком большой в форме массива), или, если вы хотите сохранить его в файле, добавьте идентификатор сеанса к имени файла.

Все зависит от того, что вы хотите сделать с файлом и его содержимым.

Ответ №4:

Возможно, вас заинтересует этот класс для разбиения php на страницы.