Dram

Рейтинг
1114
Регистрация
28.06.2008

infant, большое спасибо!

infant, спс, отправил в личку.

У проблемного файла размер всего 3,5 мб. А на серваке в данный моменты свободно 5 гб оперативы и мунин не показывает что идет како-то рост потребления ресурсов когда виснет все.

ivan-lev, попробовал получить инфу о файле, тоже зависло на этом

$pdf = $parser->parseFile('https://urlfirm/get_file.php?id='.$idOtchet[0][1].'&name=file.pdf');
$details = $pdf->getDetails();
var_dump($details);



---------- Добавлено 15.09.2019 в 12:56 ----------

Так тоже висит

$details = $pdf->getDetails();

// Loop over each property to extract values (string or array).
foreach ($details as $property => $value) {
if (is_array($value)) {
$value = implode(', ', $value);
}
echo $property . ' => ' . $value . "\n";
}

ivan-lev, а как называется этот стиль замены IF? - хочу почитать/посмотреть примеры с ним

ivan-lev:
У меня вообще большие сомнения, что он Вам именно в таком формате нужен.. =)



$newItems= [];
foreach ($bigmassive as $item) {
(isset($newItems[$item->id]) && $newItems[$item->id]->year > $item->year)
or $newItems[$item->id] = $item;
}

Люди, расскажите пожалуйста, как работает этот цикл. Я его не понимаю. При чем тут or?

Блин, все равно где-то ошибка. Вот я упростил выборку до одной фирмы чтобы легче было понять

На выходе запросы имеем массив:

array(9) {
[0]=>
object(stdClass)#19 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(4) "814"
["year"]=>
string(4) "2017"
}
[1]=>
object(stdClass)#20 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(2) "870"
["year"]=>
string(4) "2015"
}
[2]=>
object(stdClass)#21 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(4) "855"
["year"]=>
string(4) "2012"
}
[3]=>
object(stdClass)#22 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(4) "802"
["year"]=>
string(4) "2019"
}
[4]=>
object(stdClass)#23 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(2) "699"
["year"]=>
string(4) "2016"
}
[5]=>
object(stdClass)#24 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(5) "958"
["year"]=>
string(4) "2011"
}
[6]=>
object(stdClass)#25 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(4) "814"
["year"]=>
string(4) "2014"
}
[7]=>
object(stdClass)#26 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(4) "775"
["year"]=>
string(4) "2010"
}
[8]=>
object(stdClass)#27 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(5) "750"
["year"]=>
string(4) "2018"
}
}

Как мы видим, айди одной и той же фирмы, меняются только года и значения. Далее я использую следующий код:

foreach ($result as $key => $value){
if ($value->year !== '2018'){ // тут если не нужный мне год присваиваю году и валю нули
$value->year = '0';
$value->value = '0';
// unset($result[$key]);
}
$value2[] = $value;
}

//// это код ivan-lev собираем новый массив с уникальными ID без повторов.
$newItems= [];
foreach ($value2 as $item) {
(isset($newItems[$item->id]) || $newItems[$item->id]->year > $item->year)
or $newItems[$item->id] = $item;
}
var_dump($newItems);

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

PHP Notice: Undefined offset: 1822 in /var/www/rate.php on line 37

Notice: Undefined offset: 1822 in /var/www/rate.php on line 37
PHP Notice: Trying to get property 'year' of non-object in /var/www/rate.php on line 37

Notice: Trying to get property 'year' of non-object in /var/www/rate.php on line 37
array(1) {
[1822]=>
object(stdClass)#19 (3) {
["id"]=>
string(4) "1822"
["value"]=>
string(1) "0"
["year"]=>
string(1) "0"
}
}

А по идее должен был получить это

{
["id"]=>
string(4) "1822"
["value"]=>
string(5) "750"
["year"]=>
string(4) "2018"
}

В чем ошибка?

P.S. (нотисы выше ругаются на строку - (isset($newItems[$item->id]) || $newItems[$item->id]->year > $item->year))

---------- Добавлено 13.09.2019 в 14:20 ----------

Так одну проблему решил

Надо было так

($newItems[$item->id]->year > $item->year)

Теперь получаю массив фирм с ценами за нужных год, но они не отсортированы по убыванию

Изначально в

foreach ($result as $key => $value){

массив $result пришел отсортированный ORDER BY `t3`.`value` DESC

но где то потом сортировка сбилась...

где она могла слететь или по другому - как опять массив по value сортирнуть?

---------- Добавлено 13.09.2019 в 14:30 ----------

проблему окончательно решил так

function cmp_function_desc($a, $b){
return ($a->value < $b->value);
}
uasort($items, 'cmp_function_desc');

ivan-lev, АЙ ДА ШАМАН - все отработало как нужно спс, попытаюсь теперь понять как оно работает :))) Спасибо!

Я в консоле смотрю не в браузере.

Я хотел сделать так.

1. Создать пустой массив.

2. Начать добавлять в него по одной записи из главного массива.

3. Начиная со второй итерации я хотел сравнивать значения ID из основного (старого массива) со всеми уже добавленными ID в новом массиве.

4. Если есть совпадения по ID - проверяем значение года.

5. Если в новом массиве значение года - 0, а в старом с таким же ID значение больше 0 - то заменяем массив на тот где год больше.

Вот вроде и все

---------- Добавлено 13.09.2019 в 08:57 ----------

ivan-lev, да получаю из базы запросом, но результат мне нужен в формате

ORDER BY `t3`.`value` DESC

Потратил пару часов и вынужден признаться что где-то с моей логикой проблемы :(

//создал пустой массив
$arrayFinal = array ();

foreach ($value2 as $item){
array_push($arrayFinal, $item); //добавил первую запись
$i=0;
if ($arrayFinal[$i]->id == $item->id){ //начинаю проверять ID в новом массиве и в старом
if ($arrayFinal[$i]->year < $item->year){ // если они одинаковые - проверяю год
unset($arrayFinal[$i]); //если в новом год меньше, т.е. ноль (там два варианта только возможно), то удаляю подмассив из нового
array_push($arrayFinal, $item); /// и вставляю с большим годом из старого
}
}
$i++;
var_dump($arrayFinal);

}

И в итоге этого говнокода получаю очень длинный цикл, сразу его прерываю ибо понимаю что где-то накосячил....

Всего: 6924