PHP.SU

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

Страниц (31): [1] 2 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 463
Prizma Отправлено: 16 Сентября, 2018 - 19:09:51 • Тема: Преобразование многомерного массива • Форум: Вопросы новичков

Ответов: 2
Просмотров: 194
Мелкий пишет:
А где сама задача-то?

Там где приведено 2 частных примера, нужно написать участок кода, который бы работал для всех пяти аргументов, независимо сколько и какие из них == null. Примеры приведены исключительно для конкретизации результата.
(Добавление)
Решение оказалось достаточно простым, производительность вроде должна быть норм - посмотрим:
Спойлер (Отобразить)

Полный код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class CpcData
  3. {
  4.     // [source][type][campaign][ads][keyword][position] => amount
  5.     private $referrers = [
  6.         'google' => [ // source
  7.             'cpc' => [ // type
  8.                 'context' => [ // campaign
  9.                     123456789 => [ // ads
  10.                         'ключевое слово' => [ // keyword
  11.                                 2 => 10       // position => amount
  12.                         ]
  13.                     ],
  14.                     123456790 => [
  15.                         'другое ключевое слово' => [
  16.                                 1 => 5
  17.                         ]
  18.                     ]
  19.                 ],
  20.                 'retarget' => [
  21.                     123456791 => [
  22.                         'ключевое слово' => [
  23.                             0 => 11
  24.                         ]
  25.                     ],
  26.                     123456792 => [
  27.                         'другое ключевое слово' => [
  28.                             0 => 32
  29.                         ]
  30.                     ]
  31.                 ]
  32.             ]
  33.         ],
  34.         'yandex' => [ // source
  35.             'cpc' => [ // type
  36.                 'context' => [ // campaign
  37.                     223456789 => [ // ads
  38.                         'ключевое слово' => [ // keyword
  39.                             2 => 10       // position => amount
  40.                         ]
  41.                     ],
  42.                     223456790 => [
  43.                         'другое ключевое слово' => [
  44.                             1 => 5
  45.                         ]
  46.                     ]
  47.                 ],
  48.                 'retarget' => [
  49.                     223456791 => [
  50.                         'ключевое слово' => [
  51.                             0 => 3
  52.                         ]
  53.                     ],
  54.                     223456792 => [
  55.                         'другое ключевое слово' => [
  56.                             0 => 22
  57.                         ]
  58.                     ]
  59.                 ]
  60.             ]
  61.         ]
  62.     ];
  63.  
  64.     /**
  65.      * Если все параметры === null:
  66.      * return $this->referrers;
  67.      * Eсли все параметры !== null:
  68.      * return isset($this->referrers[$p1][$p2][$p3][$p4][$p5][$p6]) ? $this->referrers[$p1][$p2][$p3][$p4][$p5][$p6] : 0;
  69.      * Иначе фильтрует массив по параметрам !== null уменьшая его многомерность по известным звеньям:
  70.      * // частный пример №1
  71.      * $p1 = 'x'; $p2 = 'y'; // $p1 - source, $p2 - type
  72.      * return isset($this->referrers[$p1][$p2]) ? $this->referrers[$p1][$p2] : [];
  73.      * // частный пример №2
  74.      * $type = 'x'; // p2
  75.      * $rf = $this->referrers;
  76.      * foreach($rf as $source => $types) {
  77.      *  if(isset($types[$type])) {
  78.      *      $rf[$source] = $types[$type];
  79.      *  }else{
  80.      *      unset($rf[$source]);
  81.      *  }
  82.      * }
  83.      * return $rf;
  84.      */
  85.     public function getReferrers($source = null, $type = null, $campaign = null, $ads = null, $keyword = null, $position = null)
  86.     {
  87.         if($source !== null && $type !== null && $campaign !== null && $ads !== null && $keyword !== null && $position !== null) {
  88.             $rf = $this->referrers;
  89.             return isset($rf[$source][$type][$campaign][$ads][$keyword][$position]) ?
  90.                 $rf[$source][$type][$campaign][$ads][$keyword][$position] : 0;
  91.         }elseif ($source !== null || $type !== null || $campaign !== null || $ads !== null || $keyword !== null || $position !== null) {
  92.             $keys = [$source, $type, $campaign, $ads, $keyword, $position];
  93.             $refs = $this->referrers;
  94.             $this->arrayParser($refs, $keys);
  95.             return $refs;
  96.         }else{
  97.             return $this->referrers;
  98.         }
  99.     }
  100.  
  101.     private function arrayParser(array &$ar, array $keys)
  102.     {
  103.         $i = 0; // index of $key
  104.         foreach ($keys as $key) {
  105.             $i++;
  106.             if($key === null) {
  107.                 // проверяем остались ли еще ключи
  108.                 if(count($keys) > $i) {
  109.                     // Передаём каждый элемент на проверку по оставшимся ключам
  110.                     foreach ($ar as $k => &$v) {
  111.                         $this->arrayParser($v, array_slice($keys, $i));
  112.                         if($v === []) {
  113.                             unset($ar[$k]);
  114.                         }
  115.                     }
  116.                 }
  117.                 // Прекращаем обработку ключей, оставшиеся ключи обработает рекурсия
  118.                 break;
  119.             }else{
  120.                 if(isset($ar[$key])) {
  121.                     // убираем лишний уровень вложенности
  122.                     $ar = $ar[$key];
  123.                 }else{
  124.                     $ar = [];
  125.                     // Не найдено соответствий, прекращаем последующий поиск
  126.                     break;
  127.                 }
  128.             }
  129.         }
  130.     }
  131. }
  132. ?>

Проверка:
PHP:
скопировать код в буфер обмена
  1. $a = new CpcData();
  2. $rf = $a->getReferrers('yandex', 'cpc', 'context', 223456789, 'ключевое слово', 2);
  3. var_dump($rf); // int 10
  4. $rf = $a->getReferrers(null, 'cpc', 'context', 223456789, 'ключевое слово', 2);
  5. var_dump($rf); // array (size=1) 'yandex' => int 10
  6. $rf = $a->getReferrers('yandex', null, null, 223456789, 'ключевое слово', 2);
  7. var_dump($rf);
  8. /*
  9. array (size=1)
  10.   'cpc' =>
  11.     array (size=1)
  12.       'context' => int 10
  13.  */
  14. $rf = $a->getReferrers('yandex', null, null, null, 'ключевое слово', 2);
  15. var_dump($rf);
  16. /*
  17. array (size=1)
  18.   'cpc' =>
  19.     array (size=1)
  20.       'context' =>
  21.         array (size=1)
  22.           223456789 => int 10
  23.  */
  24. $rf = $a->getReferrers(null, 'cpc', 'retarget', null, null, 0);
  25. var_dump($rf);
  26. /*
  27. array (size=2)
  28.   'google' =>
  29.     array (size=2)
  30.       123456791 =>
  31.         array (size=1)
  32.           'ключевое слово' => int 11
  33.       123456792 =>
  34.         array (size=1)
  35.           'другое ключевое слово' => int 32
  36.   'yandex' =>
  37.     array (size=2)
  38.       223456791 =>
  39.         array (size=1)
  40.           'ключевое слово' => int 3
  41.       223456792 =>
  42.         array (size=1)
  43.           'другое ключевое слово' => int 22
  44.  */
Prizma Отправлено: 16 Сентября, 2018 - 16:50:22 • Тема: Преобразование многомерного массива • Форум: Вопросы новичков

Ответов: 2
Просмотров: 194
Добрый день,
в ходе работы потребовалось решить интересную задачку, решил поделится с аудиторией моего любимого форума.
Сразу к делу:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class CpcData
  3. {
  4.  
  5.     // [source][type][campaign][ads][keyword][position] => amount
  6.     private $referrers = [
  7.         'google' => [ // source
  8.             'cpc' => [ // type
  9.                 'context' => [ // campaign
  10.                     123456789 => [ // ads
  11.                         'ключевое слово' => [ // keyword
  12.                                 2 => 10       // position => amount
  13.                         ]
  14.                     ],
  15.                     123456790 => [
  16.                         'другое ключевое слово' => [
  17.                                 1 => 5
  18.                         ]
  19.                     ]
  20.                 ],
  21.                 'retarget' => [
  22.                     123456791 => [
  23.                         'ключевое слово' => [
  24.                             0 => 11
  25.                         ]
  26.                     ],
  27.                     123456792 => [
  28.                         'другое ключевое слово' => [
  29.                             0 => 32
  30.                         ]
  31.                     ]
  32.                 ]
  33.             ]
  34.         ],
  35.         'yandex' => [ // source
  36.             'cpc' => [ // type
  37.                 'context' => [ // campaign
  38.                     223456789 => [ // ads
  39.                         'ключевое слово' => [ // keyword
  40.                             2 => 10       // position => amount
  41.                         ]
  42.                     ],
  43.                     223456790 => [
  44.                         'другое ключевое слово' => [
  45.                             1 => 5
  46.                         ]
  47.                     ]
  48.                 ],
  49.                 'retarget' => [
  50.                     223456791 => [
  51.                         'ключевое слово' => [
  52.                             0 => 3
  53.                         ]
  54.                     ],
  55.                     223456792 => [
  56.                         'другое ключевое слово' => [
  57.                             0 => 22
  58.                         ]
  59.                     ]
  60.                 ]
  61.             ]
  62.         ]
  63.     ];
  64.  
  65.     /**
  66.      * Если все параметры === null:
  67.      * return $this->referrers;
  68.      * Eсли все параметры !== null:
  69.      * return isset($this->referrers[$p1][$p2][$p3][$p4][$p5][$p6]) ? $this->referrers[$p1][$p2][$p3][$p4][$p5][$p6] : 0;
  70.      * Иначе фильтрует массив по параметрам !== null уменьшая его многомерность по известным звеньям:
  71.      * // частный пример №1
  72.      * $p1 = 'x'; $p2 = 'y'; // $p1 - source, $p2 - type
  73.      * return isset($this->referrers[$p1][$p2]) ? $this->referrers[$p1][$p2] : [];
  74.      * // частный пример №2
  75.      * $type = 'x'; // p2
  76.      * $rf = $this->referrers;
  77.      * foreach($rf as $source => $types) {
  78.      *  if(isset($types[$type])) {
  79.      *      $rf[$source] = $types[$type];
  80.      *  }else{
  81.      *      unset($rf[$source]);
  82.      *  }
  83.      * }
  84.      * return $rf;
  85.      */
  86.     public function getReferrers($source = null, $type = null, $campaign = null, $ads = null, $keyword = null, $position = null)
  87.     {
  88.         if($source !== null && $type !== null && $campaign !== null && $ads !== null && $keyword !== null && $position !== null) {
  89.             $rf = $this->referrers;
  90.             return isset($rf[$source][$type][$campaign][$ads][$keyword][$position]) ?
  91.                 $rf[$source][$type][$campaign][$ads][$keyword][$position] : 0;
  92.         }elseif ($source !== null || $type !== null || $campaign !== null || $ads !== null || $keyword !== null || $position !== null) {
  93.             /**
  94.              * обработка всех остальных случаев
  95.              */
  96.         }else{
  97.             return $this->referrers;
  98.         }
  99.     }
  100. }
  101. ?>

PS: данные грузятся не из бд, а из локальных файлов, массив достаточно объемный, для вывода, обрабатывается 20-30 файлов в каждом из которых такой массив забитый данными посещений за неделю, из данных генерируются графики отражающие те или иные показатели

PPS: думаю сегодня завтра выложу своё решение, не знаю будет ли оно достаточно производительным для поставленных задач.
Prizma Отправлено: 27 Сентября, 2017 - 02:04:59 • Тема: Определить тип "шифрования" данных • Форум: HTTP и PHP

Ответов: 0
Просмотров: 687
Данные передаются каждые 100мс, большая часть запросов имеют почти пустой ответ:
Цитата:
||

Но некоторые принимают иные значения, вот пример ответов:
пример 1
Цитата:
|006800010000000000010000006d00011c18fc1b0007000300010000000000010000006e
0001000000ba0007007b000700b800070001:006800010000000000010000006d00011c18fc1c00
070002000100000040000100000118000100000168000700000007000000070002:00300001000
000000001000000d1000100000000000100000000|

пример 2
Цитата:
|006800010000000000010000006d00011c18fc1b0007000300010000000000010000005c
0001000000ba0007006c000700b800070001:006800010000000000010000006d00011c18fc1c00
0700020001000000400001000000d8000100000168000700000007000000070002:00300001000
000000001000000d1000100000000000100000000|

пример 3
Цитата:
|005400010000000000010000006900011c18fc1c00011c18fc1b000700030007000200010
000d84400030000:00a000010000000000010000006b000159cad97300011c18fc1c00011c18fc1b
00010000000600090000000000000010 00090000000000000000000900000000 0000000000090
00000000000000000030000:006800010000000000010000007000011c18fc1b000700100007008
00007000000070002000700000007000000011c18fc1c00070000:0068000100000000000100000
07000011c18fc1c00070000000700800 00700000007000000070000000700000 00100000000000
70000:00a000010000000000010000006b000159cad97300011c18fc1c00011c18fc1b0001000000
01000900000000000000100009000000 00000000000009000000000000000000 0900000000000
0000000030000:0024000100000000000100000067000159cad982|


Ответы приходит с сервера и они обрабатываются JavaScript(ом), ковыряюсь разбираюсь, что да как, может кто то встречал такой способ передачи данных? может это на что то похоже?
Распутываю клубок говнокода и древних фреймворков, буду благодарен, если у кого то какие то мысли появятся) пока продолжаю копать))

собственно в этих данных должны быть какие то цифры/JS объект - возможно прямые команды для <canvas> объекта на странице

грубо говоря, javascript ловит изменения состояния, путем этих запросов, и в ответе как раз обозначено, как изменилось состояние - если изменилось (иначе ответ пустой)
Prizma Отправлено: 28 Мая, 2017 - 23:41:37 • Тема: Импорт шрифтов через CSS, error_log • Форум: Вопросы новичков

Ответов: 0
Просмотров: 103
Заметил в логе ошибок запросы к не существующим файлам на сервере, а именно:
domen.ru [Sun May 28 12:37:36 2017] [error] [client 188.32.**.***] File does not exist: /home.../fonts/GothaProLigIta.otf) format('opentype', referer: https://domen[dot]ru/product/443
Если я правильно понимаю, то некий клиент неправильно интерпритирует запись в css файле:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. @font-face {
  3.     font-family:'GothamProLigthItalic';
  4.     font-style:normal;
  5.     font-weight:400;
  6.     src:url(/css/polarus2017/fonts/GothaProLigIta.otf) format('opentype');
  7.     unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116, U+1F00-1FFF, U+0370-03FF, U+0102-0103, U+1EA0-1EF9, U+20AB, U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF, U+0020-007F, U+00C0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
  8. }
  9.  

И вместо правильного пути:
Цитата:
/css/polarus2017/fonts/GothaProLigIta.otf

Ищет от первой до последней закрывающей скобки:
Цитата:
/css/polarus2017/fonts/GothaProLigIta.otf) format('opentype'


т.к. проблема частная, в день несколько таких ошибок вылетает помноженное на кол-во шрифтов, то делаю вывод, что основная часть пользовательских клиентов работает правильно.

1. Вопрос, как можно избежать таких ошибок?
2. Переноса строки перед "format" достаточно?
3. Это старые версие IE или еще какие-то звери дают такой сбой?
Prizma Отправлено: 11 Января, 2017 - 12:16:23 • Тема: Postfix в MAMP PRO • Форум: Вопросы новичков

Ответов: 0
Просмотров: 246
Добрый день,
Не так давно перешел с OpenServer под виндой на мамп, не до конца еще освоился. Сейчас возник такой вопрос.. Как можно локально сохранять письма отправляемые через php?

Перечитал всё, что можно и учитывая пустой лог postfix при успешной отправки письма из php, мне кажется, что он вообще не контачит... либо я чего то не понимаю

Собственно пытался по инструкции отправить на реальную почту используя свой ящик и менял адреса отправителя и разные учетные записи пробовал и с шифрованием и без, в логах ничего, поэтому к такому выводу и пришел.
В чем тут может быть проблема?
Prizma Отправлено: 24 Ноября, 2016 - 12:32:44 • Тема: Переход на iOS • Форум: Вопросы новичков

Ответов: 5
Просмотров: 326
Ch_chov пишет:
На новых маках докер должен запускаться без виртуал бокса.

проверим Улыбка
Prizma Отправлено: 23 Ноября, 2016 - 22:00:47 • Тема: Переход на iOS • Форум: Вопросы новичков

Ответов: 5
Просмотров: 326
kuller пишет:
а поиском воспользоваться не пробовали?

пробовал
kuller пишет:
LAMP, vagrantup

спасибо
Prizma Отправлено: 23 Ноября, 2016 - 17:08:10 • Тема: Переход на iOS • Форум: Вопросы новичков

Ответов: 5
Просмотров: 326
Добрый день, на днях приобресту MacBook,
интересно есть ли какой то стоящий пусть даже платный, пусть даже не дешевый - пакет разработчика аналог denver/OpenServer и стоит ли прибегать к такому пакету? Работал на Windows, помучался немного с убунтой в своё время, разобрался поставил nginx, php, mysql и т.д. в принципе перспектива ручной настройки не пугает, командную строку еще не совсем забыл, да и некуда от нее не денешься, но если есть стоящее приложение, которое будет содержать большую часть инструментов для работы и которое сможет облегчить привыкание к iOS, воспользовался бы им
Prizma Отправлено: 18 Ноября, 2016 - 01:13:39 • Тема: Имитация отправки формы без Curl • Форум: Вопросы новичков

Ответов: 9
Просмотров: 478
caballero пишет:
что мешает сразу отправить форму яваскриптом а не показываь кнопку подтвердить?
NeuroZ пишет:
Это я называю костылем)
NeuroZ пишет:
в чем тут здравый смысл?)

Здравый смысл не заставлять пользователя 2 раза нажимать одну кнопку дважды подтверждая одно и тоже... ты говорил про то, что изменишь на ней название, а не проще просто нажать на неё вместо того, чтобы придумывать название на которое пользователь точно кликнет?
Prizma Отправлено: 17 Ноября, 2016 - 14:51:47 • Тема: css print ссылка на страницу • Форум: Вопросы новичков

Ответов: 3
Просмотров: 157
Мелкий пишет:
Или сделайте что-нибудь типа лендингов, чтобы ссылка в документе не представляла ссылку на админку, а ссылку на лендинг, общий или для этого самого клиента.

Пока предложения в базе не храним, на лету генерируются
Мелкий пишет:
Сам документ генерировать при пост-запросе и с проверкой доступа в админку. Гет - отдавать лендинг

Как раз на этот вариант и ориентировался если не предусмотрено такой возможности
Мелкий пишет:
Хотя скорей всего будет выглядеть не очень опрятно автоматическая ссылка в документе и лучше форматировать целиком самостоятельно.

Обычная то есть Улыбка но в углу эта ссылка немного напрягает
Мелкий пишет:
Генерируйте pdf сами. tcpdf или что-нибудь в этом духе.

Ох уж эти генераторы, работал с tcpdf - да можно реализовать многое, но к сожалению из-за различных размеров изображений, кучи всяких тонкостей, чтобы сделать красивый выход придется несколько дней потратить на подгоны. А тут сервис за 2 часа сделан, через корзину кидаешь товары, добавляешь ставишь галочки, что включить в предложение (цена, артикул, описание, полное описание, характеристики ... и еще 5-6 опций), добавляешь разделители страницы, названия категорий перетаскиваешь как хочешь в требуемом порядке и сразу генерируется предложение... печать -> сохранить в pdf и вуаля Улыбка очень прилично выглядит, спасибо гуглу и айдобу за крутой импорт из html.

Спасибо за ответ. Жаль что только так, но что делать Улыбка
Prizma Отправлено: 17 Ноября, 2016 - 13:16:05 • Тема: css print ссылка на страницу • Форум: Вопросы новичков

Ответов: 3
Просмотров: 157
Добрый день.
В админке есть генератор предложений для клиентов, используя функцию печать в гугл хроме, менеджеры сохраняют документ в PDF вот только не все в настройках отключают адрес страницы с которой был распечатан документ, в итоге при клике по ссылке в электронном предложении клиенты попадают не на главную сайта, а на авторизационную форму админки.

Можно как то используя css media="print" заменить отображаемый адрес страницы с которой был распечатан документ? Хотя бы только для хрома Улыбка
Prizma Отправлено: 17 Ноября, 2016 - 12:15:40 • Тема: Имитация отправки формы без Curl • Форум: Вопросы новичков

Ответов: 9
Просмотров: 478
NeuroZ пишет:
p.s. В общем все таки решил, что отправка GET-ом единственное оптимальное решение (через редирект на url+get).

caballero пишет:
что мешает сразу отправить форму яваскриптом а не показываь кнопку подтвердить?

NeuroZ пишет:
Это я называю костылем)

скорее здравым смыслом
Prizma Отправлено: 12 Ноября, 2016 - 02:14:47 • Тема: Как седелать выборку из двумерного массива по ключам • Форум: Вопросы новичков

Ответов: 7
Просмотров: 356
Сергей Ш. пишет:
а если при задании условий отбора, функция ничего не возвращает, как это определить, потому что у меня в NetBeans пишет array[0], проверял isset(), но она показывает что значение установленно

var_dump $array, $a и $b сделай, там все ответы, где то чего-то не совпадает по условию.

И возвращать ничего не может, скорее всего возвращает пустой массив, а это значит, что callback-функция не разу не вернула true, значит ошибка либо в условии, либо в переданном массиве.

Проверь может в условии ключи неправильно указал (регистр важен) или значения передаются некорректные.
Prizma Отправлено: 11 Ноября, 2016 - 15:18:48 • Тема: Как седелать выборку из двумерного массива по ключам • Форум: Вопросы новичков

Ответов: 7
Просмотров: 356
Сергей Ш. пишет:
вместо 10 и 1 передать переменные объявленные за пределами фильтра или это нельзя сделать? Я попытался передать переменные, которые инициализирую выше и получаю сообщение об ошибке, что в условии они не инициалицированны.

вот так
PHP:
скопировать код в буфер обмена
  1. $filterArray = array_filter($array, function($el) use($a, $b) {
  2.         return ($el['optA'] == $a) && ($el['optB'] == $b);
  3. });
Prizma Отправлено: 11 Ноября, 2016 - 15:03:31 • Тема: Перебор массива данных • Форум: Вопросы новичков

Ответов: 9
Просмотров: 387
в твоем случае idcv похоже и есть parent_id

Страниц (31): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB