Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Непонятные данные в БД, сайт на WP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
rasl89
Отправлено: 14 Июня, 2020 - 22:13:57
Post Id



Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020  
Откуда: Россия, Уфа


Помог: 1 раз(а)




Всем привет. Сайт на WP.

Есть таблица с таким содержимым:
a:2:{i:0;a:5:{s:4:"time";i:1591557553;s:4:"from";d:261.15;s: 2:"to";d:271.15;s:6:"amount";s:2:"10";s:7:"message";s:26:"Те ст тест тест";}i:1;a:5:{s:4:"time";i:1589567679;s:4:"from";d:0;s:2:" to";d:1000;s:6:"amount";s:4:"1000";s:7:"message";s:0:"";}}

1591557553 - что это за время такое? кто сталкивался? как оно зашифровано?
 
 Top
Строитель
Отправлено: 14 Июня, 2020 - 23:33:01
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




rasl89 пишет:
1591557553 - что это за время такое? кто сталкивался? как оно зашифровано?
Это временнАя метка. Сравните эти два результата:
PHP:
скопировать код в буфер обмена
  1. echo date("Y.m.d / H:i:s"), '<br>';
  2. echo date("Y.m.d / H:i:s", 1591557553);

(Отредактировано автором: 14 Июня, 2020 - 23:37:25)

 
 Top
rasl89
Отправлено: 15 Июня, 2020 - 07:34:18
Post Id



Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020  
Откуда: Россия, Уфа


Помог: 1 раз(а)




Строитель пишет:
rasl89 пишет:
1591557553 - что это за время такое? кто сталкивался? как оно зашифровано?
Это временнАя метка. Сравните эти два результата:
PHP:
скопировать код в буфер обмена
  1. echo date("Y.m.d / H:i:s"), '<br>';
  2. echo date("Y.m.d / H:i:s", 1591557553);


тут получается по идее тоже можно пойти по принципу как в посте ранее, использовать unserialize, для добавления новых данных? там и дату использовать date при помощи php, затем преобразовать...
(Добавление)
а как создать новую временную метку 1591557553 формата? или в этом нет необходимости?
 
 Top
Строитель
Отправлено: 15 Июня, 2020 - 10:48:41
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




rasl89 пишет:
тут получается по идее тоже можно пойти по принципу как в посте ранее, использовать unserialize, для добавления новых данных?
Да, ведь вы получаете сериализованную строку.
rasl89 пишет:
а как создать новую временную метку 1591557553 формата?
Функция time():
Или лучше более современным способом:
PHP:
скопировать код в буфер обмена
  1. $timestamp = (new DateTime())->getTimestamp();
 
 Top
rasl89
Отправлено: 15 Июня, 2020 - 22:20:58
Post Id



Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020  
Откуда: Россия, Уфа


Помог: 1 раз(а)




Строитель пишет:
Или лучше более современным способом:
PHP:
скопировать код в буфер обмена
  1. $timestamp = (new DateTime())->getTimestamp();

- спасибо большое!

Еще один рывок в продолжении к предыдущему посту Закатив глазки

Получаем историю пополнения баланса:
$user = get_user_by('slug', $user_data01);
$ae_user_wallet1 = $user->get('topup_changelog');

Всего в истории было два пополнения, а значит инициировалось два массива, смотрим var_dump и видим многомерный массив с двумя подмассивами:

PHP:
скопировать код в буфер обмена
  1. array (size=2)
  2.   0 =>
  3.     array (size=5)
  4.       'time' => int 1591557553
  5.       'from' => float 261.15
  6.       'to' => float 271.15
  7.       'amount' => string '10' (length=2)
  8.       'message' => string 'Тест тест тест' (length=26)
  9.   1 =>
  10.     array (size=5)
  11.       'time' => int 1589567679
  12.       'from' => float 0
  13.       'to' => float 1000
  14.       'amount' => string '1000' (length=4)
  15.       'message' => string '' (length=0)


Добавляем новый массив:

PHP:
скопировать код в буфер обмена
  1.  
  2. //из предыдущего поста,Ю где мы получали новый баланс
  3. $user = get_user_by('slug', $user_data01);  
  4. $str = $user->get('ae_user_wallet');
  5. $str->balance += $m_amount;
  6.  
  7.  
  8. //выводим в историю сообщение о пополнеии баланса
  9. $ae_user_wallet1 = $user->get('topup_changelog');
  10.  
  11. $old_balance = $str->balance;
  12. $new_balance = $str->balance += $m_amount;
  13.  
  14. $timestamp = (new DateTime())->getTimestamp();
  15.  
  16. $ae_user_wallet1 = $ae_user_wallet1();
  17. $ae_user_wallet1 = array(
  18.       'time' => $timestamp,
  19.       'from' => $old_balance,
  20.       'to' => $new_balance,
  21.       'amount' => $m_amount,
  22.       'message' => ''
  23. );
  24.  


но, что-то идет не по плану, планировалось что
PHP:
скопировать код в буфер обмена
  1. $ae_user_wallet1 = $ae_user_wallet1[];
  2. $ae_user_wallet1 = array(
  3.       'time' => $timestamp,
  4.       'from' => $old_balance,
  5.       'to' => $new_balance,
  6.       'amount' => $m_amount,
  7.       'message' => ''
  8. );


добавит новый массив
 
 Top
Строитель
Отправлено: 15 Июня, 2020 - 22:32:42
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




rasl89 пишет:
но, что-то идет не по плану
Если не знаете, где именно в скрипте пропадает необходимое значение, то либо дебажте скрипт, либо расставляйте вручную контрольные точки на каждом "подозрительном" участке программы, и контролируйте визуально ожидаемое значение переменной. Или же предоставьте минимально воспроизводимый пример, чтобы мне можно было его скопировать и запустить на локальном сервере, т.к. в данный момент у меня нет необходимого окружения для запуска вашего скрипта.
 
 Top
Vladimir Kheifets
Отправлено: 16 Июня, 2020 - 10:39:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




rasl89 пишет:

Добавляем новый массив:
PHP:
скопировать код в буфер обмена
  1.  
  2. //из предыдущего поста,Ю где мы получали новый баланс
  3. $user = get_user_by('slug', $user_data01);  
  4. $str = $user->get('ae_user_wallet');
  5. $str->balance += $m_amount;
  6.  
  7.  
  8. //выводим в историю сообщение о пополнеии баланса
  9. $ae_user_wallet1 = $user->get('topup_changelog');
  10.  
  11. $old_balance = $str->balance;
  12. $new_balance = $str->balance += $m_amount;
  13.  
  14. $timestamp = (new DateTime())->getTimestamp();
  15.  
  16. $ae_user_wallet1 = $ae_user_wallet1();
  17. $ae_user_wallet1 = array(
  18.       'time' => $timestamp,
  19.       'from' => $old_balance,
  20.       'to' => $new_balance,
  21.       'amount' => $m_amount,
  22.       'message' => ''
  23. );
  24.  


но, что-то идет не по плану, планировалось что
PHP:
скопировать код в буфер обмена
  1. $ae_user_wallet1 = $ae_user_wallet1[];
  2. $ae_user_wallet1 = array(
  3.       'time' => $timestamp,
  4.       'from' => $old_balance,
  5.       'to' => $new_balance,
  6.       'amount' => $m_amount,
  7.       'message' => ''
  8. );

добавит новый массив

Добрый день!
Если хотите, что-то добавить в массив $ae_user_wallet1, напишите:
PHP:
скопировать код в буфер обмена
  1. //$ae_user_wallet1 = $ae_user_wallet1[]; //это нужно убрать
  2. $ae_user_wallet1[] = array(
  3.       'time' => $timestamp,
  4.       'from' => $old_balance,
  5.       'to' => $new_balance,
  6.       'amount' => $m_amount,
  7.       'message' => ''
  8. );

Удачи!
 
 Top
rasl89
Отправлено: 16 Июня, 2020 - 21:38:38
Post Id



Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020  
Откуда: Россия, Уфа


Помог: 1 раз(а)




Vladimir Kheifets пишет:

Удачи!


Спасибо большое, увидел ошибку! Все работает!

Но как его поставить на первое место?
Для двумерных массивов каких-то определенных примочек нет, использовал array_unshift():

PHP:
скопировать код в буфер обмена
  1.  
  2. $ae_user_wallet1[] = array_unshift($ae_user_wallet1, array(
  3.     'time' => $timestamp,
  4.     'from' => $old_balance,
  5.     'to' => $new_balance,
  6.     'amount' => strval($m_amount),
  7.     'message' => ''
  8. ));


НО, получается следующее:
PHP:
скопировать код в буфер обмена
  1. array (size=4)
  2.   0 =>
  3.     array (size=5)
  4.       'time' => int 1592332489
  5.       'from' => float 300.15
  6.       'to' => float 400.15
  7.       'amount' => string '100' (length=3)
  8.       'message' => string '' (length=0)
  9.   1 =>
  10.     array (size=5)
  11.       'time' => int 1591557553
  12.       'from' => float 261.15
  13.       'to' => float 271.15
  14.       'amount' => string '10' (length=2)
  15.       'message' => string 'Тест тест тест' (length=26)
  16.   2 =>
  17.     array (size=5)
  18.       'time' => int 1589567679
  19.       'from' => float 0
  20.       'to' => float 1000
  21.       'amount' => string '1000' (length=4)
  22.       'message' => string '' (length=0)
  23.   3 => int 3



3 => int 3 - откуда это ? не могу понять что это за отросток.
 
 Top
Строитель
Отправлено: 16 Июня, 2020 - 22:09:19
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




rasl89 пишет:
как его поставить на первое место?
Отсортировать.
 
 Top
rasl89
Отправлено: 16 Июня, 2020 - 22:12:09
Post Id



Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020  
Откуда: Россия, Уфа


Помог: 1 раз(а)




Строитель пишет:
rasl89 пишет:
как его поставить на первое место?
Отсортировать.

разве можно отсортировать подмассив по дате?
(Добавление)
можно конечно функцию написать...
 
 Top
Строитель
Отправлено: 16 Июня, 2020 - 22:16:38
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




rasl89 пишет:
разве можно отсортировать подмассив по дате?
Спойлер (Отобразить)


rasl89 пишет:
можно конечно функцию написать
А можно и готовую использовать )

(Отредактировано автором: 16 Июня, 2020 - 22:17:52)

 
 Top
rasl89
Отправлено: 16 Июня, 2020 - 22:24:29
Post Id



Гость


Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020  
Откуда: Россия, Уфа


Помог: 1 раз(а)




Строитель пишет:

А можно и готовую использовать )


Спасибо большое! Как всегда кратко и четко! Работает!

PHP:
скопировать код в буфер обмена
  1.  
  2. usort($ae_user_wallet1, function($a, $b){
  3.     return $a['time'] [b]<=[/b] $b['time'];
  4. });

(Добавление)
На php.net тоже нечто подобное показывают.
но до этого что-то не дошло сразу:
PHP:
скопировать код в буфер обмена
  1. return $a['time'] [b]<=[/b] $b['time'];
 
 Top
Vladimir Kheifets
Отправлено: 17 Июня, 2020 - 10:32:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




rasl89 пишет:
Vladimir Kheifets пишет:

Удачи!


Спасибо большое, увидел ошибку! Все работает!

Но как его поставить на первое место?
Для двумерных массивов каких-то определенных примочек нет, использовал array_unshift():

PHP:
скопировать код в буфер обмена
  1.  
  2. $ae_user_wallet1[] = array_unshift($ae_user_wallet1, array(
  3.     'time' => $timestamp,
  4.     'from' => $old_balance,
  5.     'to' => $new_balance,
  6.     'amount' => strval($m_amount),
  7.     'message' => ''
  8. ));


НО, получается следующее:
PHP:
скопировать код в буфер обмена
  1. array (size=4)
  2.   0 =>
  3.     array (size=5)
  4.       'time' => int 1592332489
  5.       'from' => float 300.15
  6.       'to' => float 400.15
  7.       'amount' => string '100' (length=3)
  8.       'message' => string '' (length=0)
  9.   1 =>
  10.     array (size=5)
  11.       'time' => int 1591557553
  12.       'from' => float 261.15
  13.       'to' => float 271.15
  14.       'amount' => string '10' (length=2)
  15.       'message' => string 'Тест тест тест' (length=26)
  16.   2 =>
  17.     array (size=5)
  18.       'time' => int 1589567679
  19.       'from' => float 0
  20.       'to' => float 1000
  21.       'amount' => string '1000' (length=4)
  22.       'message' => string '' (length=0)
  23.   3 => int 3



3 => int 3 - откуда это ? не могу понять что это за отросток.


Добрый день!
Чтобы поставить его на первое место напишите:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $new = array
  3. (
  4. 'time' => $timestamp,
  5. 'from' => $old_balance,
  6. 'to' => $new_balance,
  7. 'amount' => $m_amount,
  8. 'message' => ''
  9. );
  10. $ae_user_wallet1 = array_merge($new, $ae_user_wallet1);
  11. ?>

Цитата:
3 => int 3 - откуда это

Вообще-то array_unshift здесь не подходит, но может потом потребуется.
Вы не верно задали праметры. См. http://www.php.su/array_unshift
Удачи!

(Отредактировано автором: 17 Июня, 2020 - 10:33:22)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB