PHP.SU

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

Страниц (22): В начало « ... 6 7 8 9 [10] 11 12 13 14 ... » В конец

> Найдено сообщений: 329
MAXUS Отправлено: 26 Февраля, 2014 - 16:45:53 • Тема: Удаление дублей из многомерных масивов. • Форум: Напишите за меня, пожалуйста

Ответов: 32
Просмотров: 545
papagot пишет:

Извините что сразу не сказал но массив надо сохранить так как он есть....
то есть в конечном итоге я должен получить:
PHP:
скопировать код в буфер обмена
  1.  
  2.     [response] => Array
  3.         (
  4.             [0] => 6
  5.             [1] => Array
  6.                 (
  7.                     [mid] => 14966
  8.                     [date] => 1392976445
  9.                     [out] => 0
  10.                     [uid] => 239099718
  11.                     [read_state] => 0
  12.                     [title] =>  ...
  13.                     [body] => ваыпывапы
  14.                                        
  15.                                 )
  16.  
  17.             [2] => Array
  18.                 (
  19.                     [mid] => 14948
  20.                     [date] => 1392976013
  21.                     [out] => 0
  22.                     [uid] => 85290242
  23.                     [read_state] => 0
  24.                     [title] =>  ...
  25.                     [body] => ваыпывапы
  26.                 )
  27.  
  28. )
  29.  


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

В общем, если надо удалить дубли и оставить первый встретившийся, то:

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($data as $key=>$value){
  3.         if(!$value['uid']) continue;
  4.         if(!$check[$value['uid']]) $check[$value['uid']]=true;
  5.         else unset($data[$key]);
  6. }
  7.  


Если надо удалить дубли и оставить последний встретившийся, то:

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($data as $key=>$value){
  3.         if(!$value['uid']) continue;
  4.         if($check[$value['uid']]) unset($data[$check[$value['uid']]]);
  5.         $check[$value['uid']]=$key;
  6. }
  7.  





(Добавление)
EuGen пишет:
Отправлено: 26 Февраля, 2014 - 16:31:31


Array
(
[] => 6
[239099718] => Array
(
[mid] => 14966
[date] => 1392976445
[out] => 0
[uid] => 239099718
[read_state] => 0
[title] => ...
[body] => ваыпывапы
)

[85290242] => Array
(
[mid] => 14944
[date] => 13929760009
[out] => 0
[uid] => 85290242
[read_state] => 0
[title] => ...
[body] => ваыпывапы
)

)

Результат выполнения вашего кода. Обратите внимание на ключи, выделенные жирным.
А помимо прочего, у нас с вами один и тот же косякУлыбка Элементы, у которых нет uid считаются дублями и остается только один из них. Я подправил этот момент.
MAXUS Отправлено: 26 Февраля, 2014 - 16:22:02 • Тема: Удаление дублей из многомерных масивов. • Форум: Напишите за меня, пожалуйста

Ответов: 32
Просмотров: 545
EuGen пишет:
MAXUS пишет:
У вас массив видоизменяется. Ключи рушатся.

Они и должны. Ведь идёт удаление дублей. Кроме того, ничего не сказано, что ключи не должны быть не по порядку. А если это так нужно - применить array_values() к результату.


На оставшихся элементах ключи видоизменяются. Становятся равны uid.

Добавление

И, потом, если в исходном массиве содержатся указатели, то они при таком подходе тоже порушатся. Если не содержатся, то замена массива не критична.
MAXUS Отправлено: 26 Февраля, 2014 - 15:09:45 • Тема: Удаление дублей из многомерных масивов. • Форум: Напишите за меня, пожалуйста

Ответов: 32
Просмотров: 545
papagot пишет:
Помогите написать...


PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($data as $key=>$value){
  3.         if($check[$value['uid']]) unset($data[$check[$value['uid']]]);
  4.         $check[$value['uid']]=$key;
  5. }
  6.  


Где $data - переменная с вашим массивом.



(Добавление)
EuGen пишет:
$data - исходный массив. $result - итог без дубликатов.


У вас массив видоизменяется. Ключи рушатся.
MAXUS Отправлено: 26 Февраля, 2014 - 13:47:26 • Тема: удаление ошибок в BBcodes • Форум: Вопросы новичков

Ответов: 1
Просмотров: 97
alchin пишет:
после выполнения этого кода тег [/b] - удалён, а тег [/red] почему-то остался, помогите найти причину!


Исходную строку покажите.
(Добавление)


А что по-вашему должна делать эта конструкция? Скорее всего $var!=preg_replace? Я не прав?
MAXUS Отправлено: 26 Февраля, 2014 - 13:40:11 • Тема: Не нарушится ли концепция ООП • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 1385
qtk пишет:
Нет, у меня все проще.
Можно ли использовать в качестве аргумента другую функцию?




А здесь в качестве аргумента используется результат функции, а не она сама...
MAXUS Отправлено: 25 Февраля, 2014 - 15:35:53 • Тема: Распарсить простой bbcode • Форум: Регулярные выражения

Ответов: 10
Просмотров: 625
Viper пишет:
Сделал пока вот так.


Вотета, думаю, подойдет:

PHP:
скопировать код в буфер обмена
  1. $string = '[country ln=COUNTRIES][cn=us]USA[/cn], [cn=hu]Hungary[/cn], [cn=ru]Russia[/cn], [cn=gb]Great Britain[/cn][/country]';
  2.  
  3. $pattern = '#\[country ln=(.*?)(\])|\[cn=|(\[\/cn\])|\[\/country\]|\]#ie';
  4. echo preg_replace($pattern, "'$1'.(('$2')?':':'').(('$3')?'':' ')", $string);


Насчет быстродействия буду признателен, если поделитесь результатами.

Дополнение: А... Ну если это парсинг, то не подойдет...

Важное дополнение:

Хотя, а почему нет?

PHP:
скопировать код в буфер обмена
  1.  
  2. $string = '[country ln=COUNTRIES][cn=us]USA[/cn], [cn=hu]Hungary[/cn], [cn=ru]Russia[/cn], [cn=gb]Great Britain[/cn][/country]';
  3.  
  4. $pattern = '#\[country ln=(.*?)\]|\[cn=(.*?)\](.*?)\[\/cn\]|\[\/country\]|,\s*#ie';
  5. echo preg_replace($pattern, "(('$1')?'$1:<br />':'').(('$2')?'<img src=\"$2.png\" border=\"0\" alt=\"$3\" class=\"ui-icon-country\" />$3':'')", $string);
  6.  


Работает эта хреновина!

Сдается, так че хочешь можно одним патерном распарсить. Модификатор "e" рулит...

ЗЫ Впервые вижу пользу от сочетания "ie" Улыбка
ЗЗЫ Хотя вложенные тэги все равно так не распарсить...
MAXUS Отправлено: 25 Февраля, 2014 - 13:53:56 • Тема: Строгое сравнение с массивом • Форум: SQL и Архитектура БД

Ответов: 10
Просмотров: 119
and2009zxc пишет:

Если воспользоваться оператором IN, то, выделив, например, два жанра - детектив и драма,- получим все драмы и все детективы. Мне же нужно чтобы были получены ТОЛЬКО фильмы двух жанров (детектив, драма)
Как бы мне это провернуть? Не понял и огорчён


Если речь о том, что фильм может присутствовать в двух жанрах (детектив и драма) и при выборке дублируется, то GROUP BY в помощь.
MAXUS Отправлено: 25 Февраля, 2014 - 09:57:18 • Тема: Строгое сравнение с массивом • Форум: SQL и Архитектура БД

Ответов: 10
Просмотров: 119
DelphinPRO пишет:
MAXUS пишет:
foreach($mass as $key=>$value) $in[$key]="'{$value}'";
$in=implode(",",$in);


проще

PHP:
скопировать код в буфер обмена
  1. $in = implode(",", $mass);
  2. // или с кавычками
  3. $in = "'" . implode("','", $mass) . "'";
  4. // или так (не используя конструкцию IN () в SQL)
  5. $where = implode(" OR ", $mass);


Согласен. И быстрее.

А вот с OR не понял...
MAXUS Отправлено: 25 Февраля, 2014 - 08:30:31 • Тема: Строгое сравнение с массивом • Форум: SQL и Архитектура БД

Ответов: 10
Просмотров: 119
and2009zxc пишет:
SELECT FROM WHERE <условие>;
В условии нужно что-то типа id=$mass[0] and id=$mass[1] and.... and id=$mass[n]
где n неизвестно заранее
Помогите составить запрос плиз!


AND тут, действительно, превращает условие в бесполезное. Скорее тогда OR.

А для массива неизвестной длины можно поступить так:

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($mass as $key=>$value) $in[$key]="'{$value}'";
  3. $in=implode(",",$in);
  4.  


и потом



Т.е.
1. каждый элемент массива заключаем в правильные кавычки.
2. превращаем массив в строку, где все значения разделены запятыми
3. используем полученную строку в условии IN

Итоговое условие с $in будет такого вида:

WHERE id IN ('какойто_id','другой-то_id','итд_id')

Добавление

Можно все $in заменить на $mass... Тогда исходный массив $mass превратится в итоге в строку и его же и будем использовать в условии запроса. Это если исходный массив в дальнейшем при выполнении скрипта не нужен.
MAXUS Отправлено: 25 Февраля, 2014 - 08:00:45 • Тема: Вывести значение ячейки по значению соседней • Форум: Вопросы новичков

Ответов: 18
Просмотров: 975
esterio пишет:
небольшая поправочка Иньекции. Инкапсуляция - одно из правил ООП.


Сорри. Конечно же. Бес попутал.
MAXUS Отправлено: 24 Февраля, 2014 - 16:04:15 • Тема: Кэширование классами • Форум: Объектно-ориентированное программирование

Ответов: 15
Просмотров: 2656
Ch_chov пишет:
Если кто то получил доступ к файловой системе сервера, то метаться уже поздно. Какой смысл вставлять код в компилированные шаблоны, которые будут перезаписаные после сброса кэша? Ведь на сервере наверняка, есть куча других php файлов.


Логично. Но суть в следующем. По идее на все можно поставить запрет на запись, а на кэш нельзя (ну по определению). Скажем, получил ты доступ к исполнению php кода через иньекцию, но все вокруг только для чтения. В таком случае изменить можно только кэш. Я так рассуждаю. Поправьте, если не прав.

Попутный вопрос. Средствами php, насколько я понимаю, атрибуты файлов менять можно. А при любых настройках? Просто если можно, то тогда в итоге, действительно, по большому счету все равно какие атрибуты стоят на файлах. И, действительно, проще искать варианты размещения shell в постоянных скриптах, а не в кэше.
MAXUS Отправлено: 24 Февраля, 2014 - 15:42:06 • Тема: Кэширование классами • Форум: Объектно-ориентированное программирование

Ответов: 15
Просмотров: 2656
IllusionMH пишет:
Тут уже скорее если смогли скомпрометировать файлы кэша, то нужно искать имеющиеся уязвимости.


Вот эта фраза заставила меня переформулировать вопрос. Скорее, его нужно поставить так.

Хранить кэш в классах - это элегантно и быстро. Но хранить кэш в сериализованном каким-либо образом виде, вероятно, безопаснее. При этом при десериализации можно избежать запуска измененного кода, но, безусловно, потерять в производительности. Дак вот, если принять за условие, что TWIG или другой подобным образом работающий шаблонизатор сам не пропускает в кэш чужой код, но он попадает в кэш через другие дырки, то при сериализованных шаблонах появляется дополнительная защита, но падает, как я уже сказал скорость обработки. И вопрос в том стоит ли париться в этом случае или такая вставка кода, если она случилась, безусловно не будет отнесена на счет шаблонизатора.

Условно, не получим в итоге фразы, что это шаблонизатор виноват, потому что вот если бы он хранил кэш в сериализованном виде, то такого бы не произошло?
MAXUS Отправлено: 24 Февраля, 2014 - 15:15:16 • Тема: Кэширование классами • Форум: Объектно-ориентированное программирование

Ответов: 15
Просмотров: 2656
esterio пишет:
ну насколько я знаю тот же твиг работает по белому списку комманд. что это значит, сначала он парсит шаблон и саздает класс с тем же шаблоном, но только тем который уже распарсен и вместо {var} имеет echo $var (как то так). Тоесть если нехоршый человек имеет доступ к файловой системе, ему не составит труда изменить код в кеше, но шаблонизатор сам не пропустит код PHP в шаблоне. Поправьте если я не прав


Создает файл с классом. Имя класса - хэш имени шаблона (с солями и т.п.). При запуске не парсит, а ищет сначала нужный класс и проверяет время создания начального шаблона. Если время создания начального шаблона изменилось, то перепарсит, если кэша нет, то тоже.
Но суть не в этом. Можно же не в echo записать, а вообще вне класса.
MAXUS Отправлено: 24 Февраля, 2014 - 14:30:21 • Тема: Кэширование классами • Форум: Объектно-ориентированное программирование

Ответов: 15
Просмотров: 2656
Мелкий пишет:
Если кто-то посторонний имеет доступ к ФС - беспокоиться уже поздно. Гасить сервер и полный аудит, что откуда и как влезли.


Т.е. правильно я понимаю, что эту возможность надо отсекать на других уровнях кода, а за подобную реализацию кэша можно быть спокойным? Т.е. если кто-то в класс чего-то запихал, то косяк точно не в организации кэша подобным образом?
MAXUS Отправлено: 24 Февраля, 2014 - 14:00:15 • Тема: Кэширование классами • Форум: Объектно-ориентированное программирование

Ответов: 15
Просмотров: 2656
Шаблонизатор TWIG хранит кэш, создавая классы и записывая их в файлы. При загрузке шаблона, проверяет есть ли файл с классом, не устарел ли и т.п. Потом использует класс через автозагрузку.

Вот у меня назрел общий вопрос. А насколько это безопасно? Например, если в файл с классом затолкать код (вне класса), то при загрузке класса этот код выполнится. И если в случае с постоянно используемыми классами, насколько понимаю, можно на файлы с классами поставить запрет на запись, то с кэшем так поступить не получится.

Соответственно, повторюсь, насколько такой вариант организации кэша безопасен и стоит ли в этом направлении беспокоиться дальше?

Страниц (22): В начало « ... 6 7 8 9 [10] 11 12 13 14 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB