Полезные советы и решения

Написана 13 Сентября, 2012 в 11:57. Автор: borN_free   |   Теги: sugar, lifehack Комментарии 2

PHP

Данная статья будет постоянно пополняться. Здесь представлены интересные для меня решения некоторых задач или просто интересный код.

PHP

Чтобы распарсить контент и получить на выходе UTF-8 строку, необходимо перед шаблоном регулярного выражения вставить (*UTF8)

preg_match('(*UTF8)[a-z0-9]+', $matches);

Если у вас длинное регулярное выражение, можно разбить его по строкам, и написать комментарии к каждому "действию" с помощью ~x

$str = 'test-regex-blablabla123456';
preg_match('
    ~
    ^      #начало строки
    (\w+)  #слово
    .+?    #любая последовательность (не жадная)
    (\d+)  #число
    $      #конец строки
    ~x
', $str, $matches);
var_dump($matches);

Результат:

array
  0 => string 'test-regex-blablabla123456' (length=23)
  1 => string 'test' (length=4)
  2 => string '123456' (length=5)

Если вам необходимо заменить много разных символом в строке на один (например на пустую строку), то в функции str_replace() вторым параметром можно указать не массив, а просто пустую строку, при этом каждый элемент из первого массива будет заменен вторым параметром. К своему стыду узнал это только недавно.

$message = 'a-bcd;ef_g';
$newMessage = str_replace(array('-', ';', '_'), '', $message); // 'abcdefg'

Чтобы отфильтровать массив, убрав из него не подходящие под условие элементы, надо пользоваться функцией array_filter, но ни в коем случае не циклом:

$numbers = array(1, 2, 3, 4, 5);
// используем анонимную функцию
$filteredNumbers = array_filter($numbers, function ($v) {
    // оставим только четные
    return ($v % 2) == 0;
});
// $filteredNumbers - {2,4}

В это же время, если вы хотите пройтись по всем элементам массива и сделать какие-либо дейсвтия с ними, используйте функцию array_map

$numbers = array(1, 2, 3, 4, 5);
// используем анонимную функцию
$doubledNumbers = array_map(function ($v) {
    // умножим все на 2
    return $v * 2;
}, $numbers);
// $doubledNumbers - {2, 4, 6, 8, 10}

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

$firstArray = array('key' => 'value');
$secondArray = array(1 => 'data');
$result = $firstArray + $secondArray;
// результат
Array
(
    ['key'] => value
    [1] => data
)

Чтобы добавить во время исполнения скрипта дополнительный include path, необходимо перезаписать существующий, разделенный с новым через PATH_SEPARATOR - платформонезависый разделитель:

$yetAnotherIncludePath = '../vendor/something';
set_include_path(get_include_path() . PATH_SEPARATOR . $yetAnotherIncludePath);

MySQL

Знали ли вы, что можно делать ORDER BY в запросах UPDATE? А ведь можно:

UPDATE `users` SET `rating` = 5 * `age` ORDER BY `age` DESC

Хотите сделать дамп конкретной таблицы из базы данных? А может еще и написать условие выборки? Пожалуйста:

mysqldump -ulogin -ppass --databases "test" --tables "users" --where "id < 20" > dump.sql

HTML

Чтобы разрешить выбирать только один элемент в <select> с атрибутом multiple, можно добавить атрибут size="3" (любое число). При этом дропдаун станет таким же как и с multiple="multiple" визуально. Вот пример:

Мы можем выбрать только один элемент.

Zend Server

Перезагрузить апач для Zend Server:

net stop Apache2.2-Zend && net start Apache2.2-Zend

Apache

Бывают ситуации, когда Apache не запускается, и лог не помогает, тогда на помощь придет такая команда, которая которая в консоль отправляет все debug сообщения:

sudo /usr/sbin/httpd -k start -e Debug -E /dev/stdout

2 comments

+5 ответить
November 8, 2012 at 06:56 am

Последний пункт - PHP. Это скорее html чем PHP :)

ответить
November 8, 2012 at 06:59 pm

Ваша правда, исправил. Спасибо!

Оставьте свой комментарий:

Поля с * обязательны.