PhpStorm не видит переменные переменных

PhpStorm не видит динамическое определение переменных. Вот код, в котором IDE видит ошибки там, где их нет:

foreach (array('foo', 'bar', 'baz') as $postfix) {
    $postfixedVariableName = sprintf('variable_%s', $postfix);
    $$postfixedVariableName = $postfix;
}
echo $variable_foo, PHP_EOL; // PhpStorm: Undefined variable 'variable_foo'
echo $variable_bar, PHP_EOL; // PhpStorm: Undefined variable 'variable_bar'
echo $variable_baz, PHP_EOL; // PhpStorm: Undefined variable 'variable_baz'

Чтобы PhpStorm увидел подобные переменные, необходимо добавить декларацию переменных в текущей области видимости:

/** @var $variable_foo */
/** @var $variable_bar */
/** @var $variable_baz */
foreach (array('foo', 'bar', 'baz') as $postfix) {
    $postfixedVariableName = sprintf('variable_%s', $postfix);
    $$postfixedVariableName = $postfix;
}
// ...

PHP: добавить элемент в середину массива

Функция array_splice() удаляет length элементов, расположенных на расстоянии offset из массива input, и заменяет их элементами массива replacement, если он передан в качестве параметра. Эту функцию можно использовать для вставки, замены и удаления элементов массива.

Если передать третьим параметром ноль, то никакие элементы массива не будут удалены.

$input = ["red", "green", "blue", "yellow"];
array_splice($input, 3, 0, "white");
// => ["red", "green", "blue", "white", "yellow"];
array_splice($input, 3, 0, ["purple", "black"]);
// => ["red", "green", "blue", "purple", 
//     "black", "white", "yellow"]

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

Партиционирование по списку в MySQL

Партиционирование (секционирование) данных — это реально крутая штука при больших объемах данных. Вот рабочий пример. Допустим, у нас есть два списка: грамматические категории и словоформы. Первому списку соответствует таблица grammar, второму — forms. В таблицах 65 и 4058805 записей соответственно. Отношение между таблицами — многие-ко-многим, роль вспомогательной таблицы выполняет таблица morphology. В ней 23044224 записей. Её-то мы и будем партиционировать.

Продолжить чтение →

Порядок в телефонной книге

  1. Когда вы записываете новый номер в телефонную книгу, припишите к имени дату звонка. Со временем будет проще найти актуальный номер: дата информативнее, чем помета типа «Сергей (новый)».
  2. Записывайте не только имена, но и фамилии. Так будет легче найти конкретного Михаила, и сразу понять, какая из Анастасий звонит.
  3. К телефонам фирм (такси, вокзалы, поликлиника), приписывайте название города. Все мы переезжаем, поэтому со временем понять, к какому городу относится тот или иной номер будет трудно.
  4. Обозначения типа зайка, солнышко заменяйте на имена и фамилии. Представьте, что вы выступаете с презентацией перед руководством компании. И в это время начинает звонить ваш телефон, оставленный на столе. Сидящий рядом с ним директор смотрит на экран и видит, что звонит красотулька. Тот самый неловкий момент. Исключения — мама, папа, дочь, сын, дом.
  5. Чувак на девятке, рыжая телочка, фиг знает кто… —  это пометки, которые надо по возможности заменять на нормальные имена. Уже потому, через пару недель вы уже не вспомните, кто это такой — чувак на девятке.

Общая ориентир: если в вашей телефонной книге сможет сориентироваться другой человек, значит все нормально.

Сортировка записей с учетом регистра в MS Access

В Microsoft Access записи сортируются по возрастанию или по убыванию без учета регистра. Однако при сортировке по кодам ASCII прописные и строчные буквы различаются, что и позволяет выполнять сортировку с учетом регистра. При помощи небольшого трюка можно обойтись и без VBA.

В конструкторе запросов создаем новое поле и пишем в нем:

code: Asc(Left([table]![field];1))

Вспомогательное поле должно стоять в конструкторе запросов ДО сортируемого поля — тогда при сортировке данные будут отсортированы в первую очередь по нему:

Объяснение процесса. table, field — это название таблицы и поля, данные в которых нужно отсортировать. Функция Left() используется для получения первого символа в поле, по которому мы сортируем данные. Функция Asc() возвращает ASCII-код для первого символа. code: — название вспомогательного поля.

Как лучше всего поздравить человека с днем рождения

Запомните раз и навсегда: нет такой обязанности — поздравлять людей, пусть даже близких. Это действие добровольное. Поздравляйте только тогда, когда вы правда этого хотите.

Если есть возможность поздравить человека лично, сделайте это. Не можете поздравить лично — позвоните. Не можете позвонить — пошлите открытку (настоящую, по почте) или телеграмму. Ни в коем случае не шлите смс. Представьте себе, что вы получили пятьдесят смс с поздравлениями. Правила приличия требуют, чтобы вы отправили «спасибо» на каждое из них. Удобно ли это? В самом крайнем-крайнем случае напишите поздраление по электронной почте или пошлите личное (!) сообщение в социальной сети. Когда вы поздравляете лично или по телефону, вы точно знаете, что вас слышат. Когда поздравляете по электронной почте — нет никаких гарантий, что ваше поздравление будет прочитано. Продолжить чтение →

Недопустимый знак в полном имени xml

Если при импорте xml-файла выдается сообщение типа «Не удается открыть файл из-за ошибок его содержимого. Сведения: Недопустимый знак в полном имени.» — откройте этот файл в обычном блокноте и поищите два или более символов <  подряд (<< или <<<) замените их на одинарный < и файл откроется без проблем.

MS Access: преобразование UNIX time в читаемую форму

Решение может пригодиться, если MS Access подцеплен к MySQL-базе, автоматически подгребает оттуда данные, а время в MySQL в формате timestamp. Преобразование без учета часового пояса (UNIX time — это время по Гринвичу):

( [UNIX time] / 86400 ) + #01.01.1970#

Корректируем время с учетом часового пояса. +4 часа:

( ( [UNIX time] + 14400) / 86400 ) + #01.01.1970#

Добавляем/вычитаем количество секунд в часах: (4*60*60=14400)