Получить последние 500 значений объекта php?

Я знаю, что функция PHP end () существует, но мне нужно не только последнее значение объекта, мне нужны последние 500 значений.

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

Я думал о том, чтобы, возможно, изменить значения объекта данных, взять первые 500 значений, а затем снова отменить их. Это звучит как слишком большая потраченная впустую обработка.

Я также попытался сначала преобразовать объект в массив, а затем использовать array_slice($array, -500); и преобразовать его обратно в объект PHP и использовать его в foreach. Когда я это сделаю, я получаю сообщение об ошибке:

Invalid argument supplied for foreach()

Это код:

$dataArray = array_slice((array) $data, -5);
$data = json_encode($dataArray);

У вас есть идеи, что я здесь делаю не так или как это сделать умнее?

Не могли бы вы привести пример вашего объекта $data? Если это объект, который, как я предполагаю, имеет строковые свойства, как вы определяете «последние» 500 значений?

Jonnix 30.10.2018 11:20

@ShaunBebbers Срез массива с одним элементом?

Jonnix 30.10.2018 11:23

Реверсирование - не такая уж дорогая операция. Я бы выбрал это решение

Ki Jéy 30.10.2018 11:35

$ count = 1000; $ arrValue = []; для ($ i = 0; $ i <$ count; $ i ++) {array_push ($ arrValue, $ i); } // print_r ($ arrValue); $ n = 500; // требуется последнее n значений $ arr = array_slice ($ arrValue, - $ n); print_r ($ arr);

sundsx 30.10.2018 11:45

@JonStirling я получаю свой объект из этой строки: $ data = $ device-> data () -> get ();

Varyagi Viking 30.10.2018 12:02

@ShaunBebbers Когда я пытаюсь использовать вашу строку вместо этого, я все равно получаю сообщение об ошибке: 'Недопустимый аргумент для foreach ()'

Varyagi Viking 30.10.2018 12:06

@ KiJéy Итак [преобразование в массив -> реверсирование -> взятие первых 500 значений -> реверсирование] не вызовет проблем с производительностью даже для внешнего интерфейса? Я использую lavacharts, чтобы построить график данных.

Varyagi Viking 30.10.2018 12:09

Думаю, нам нужна дополнительная информация. Используйте echo print_r($data, true);, прежде чем объявлять $dataArray, говорит ли это вам, что переменная $data является массивом? Я не понимаю, почему вы пытаетесь преобразовать переменную $data в массив, как вы это делаете. Если $data - это JSON, используйте json_decode($data, true);, а не (array) $data, как вы это делаете.

Shaun Bebbers 30.10.2018 12:13

Ответ @ShaunBebbers Накова сделал именно то, что я хотел, с помощью обратного метода. Вы все еще хотите, чтобы я добавил запрошенную вами информацию?

Varyagi Viking 30.10.2018 12:20

@VaryagiViking - нет ничего страшного, если вы нашли решение, но дополнительная информация в ваших вопросах будет полезна для всех, так как правильное решение сделало предположение о том, какой тип данных хранился в $data.

Shaun Bebbers 30.10.2018 12:27

@ShaunBebbers Да, вы правы, я постараюсь предоставить больше информации, когда в следующий раз задам другой вопрос;) спасибо

Varyagi Viking 30.10.2018 12:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
11
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

если ваш объект $data представляет собой набор элементов, вы можете использовать следующее:

$data->reverse()->take(500)->get();

или превратите свой массив в коллекцию

collect($data)->reverse()->take(500)->get();

Если я использую верхнюю строку, я получаю «недостающие параметры для операции получения», но как только я ее удаляю, все работает нормально!

Varyagi Viking 30.10.2018 12:12
    $count = 1000;
    $arrValue = [];

    $arrValueMD = [];

    for ($i=0; $i < $count; $i++) {

        array_push($arrValue, $i);

    }

    foreach ($arrValue as $k => &$v) {

        array_push($arrValueMD, $k, $v);
     //  echo "Current value of \$a:$k $v.\n";
    }
     //   print_r($arrValueMD);

    $n = 500;
    $arr = array_slice($arrValueMD, -$n);
    print_r($arr);

Другие вопросы по теме