У меня есть «Таблица истории цен», основанная на таблице MySQL. Поскольку у нас много одинаковых списков, многие из этих записей отображаются как дубликаты, помимо, конечно, ItemID.
Вот как я в настоящее время отсеиваю дубликаты (на самом деле не дубликаты, а похожие списки, которые имеютте же SKU, Ymd Date, Previous Price, New Price и каналы продаж. - а также пытается получить количество (см. логику $ count ниже) количества найденных одинаковых / «повторяющихся» строк)
$inventoryhistoryrows = array();
$skuarray = array();
foreach ($pricehistoryarray as $ph_key => $ph_values) {
// defining variables, etc.
. . . . .
$ph_sku_timestamp = $inventoryskus . ' ' . $ph_timestamp . ' ' . $ph_previousprice . ' ' . $ph_newprice . ' ' . $ph_channel;
if (in_array($ph_sku_timestamp, $skuarray)) { continue; }
$skuarray[] = $ph_sku_timestamp;
if(isset($prev)) {
$newcount = $count - $prev;
$prev = $count;
}
else {
$prev = $count;
$newcount = $count;
}
$ inventoryhistoryrows [] = массив ($ newcount, $ ph_itemid, $ventoryskus, $ ph_previousprice, $ ph_newprice, $ ph_channel, $ ph_timestamp);
Это работает .... но мой $newcount
всегда на одну строку впереди!
Вот иллюстрация вывода в таблице:
Обратите внимание на стрелки на крайней левой стороне. Переменные $ newcount верны, но весь первый столбец необходимо переместить на одну строку вверх.
Значение, 1
должно быть удалено из первой строки. 3
Должен быть в первом ряду. 17
Должен быть во втором ряду.
Я, конечно, вижу, что причина, по которой 1 появляется в первом ряду, связана с этим утверждением
else {
$newcount = $count;
}
То есть это будетвсегда возвращайте 1 для первой строки, так как prev
не существует. Но я просто положил это туда, так как не знал, как правильно получить данные, как я хотел.
У кого-нибудь есть идеи, как мне это сделать? В начальном цикле foreach для $pricehistoryarray
(я полагаю, это будет лучшим решением) или относительно простым способом смещения вверх только первого столбца после построения массива $inventoryhistoryrows
?