WordPress как на ладони
Готовые темы (шаблоны) для WordPress wordpress jino

Полезные PHP коды — для новичков

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

Тут собрана лишь малая часть, и наверное это не последняя статья на тему несложных популярных задачек в PHP. Кроме того, я планирую дополнять эту статью...

В общем, не буду никого ни за что тянуть и перейду сразу к кодам, которые, я надеюсь, будут полезны новичкам: кто что для себя найдет - все ваше smile

Оглавление:

Короткая запись операторов присваивания

Когда нужно что-то прибавить, отнять или объединить, то для краткости можно использовать сокращения в операторе = - операторе присваивания:

// полная запись, а под ней тоже самое только кратко
$a = $a + 1;  $a = $a + 5;  $a = $a - $b;  $a = $a . 'текст';
$a++;         $a += 5;      $a -= $b;      $a .= 'текст';

Время выполнения PHP скрипта

Замерить скорость выполнения всего PHP кода или какой-то отдельной его части, можно с помощью встроенной в PHP функции microtime(true). Функция вернет UNIX штамп времени в микросекундах. Параметр true «говорит» функции вернуть число, а не строку, чтобы можно было потом просто отнять одно число от другого.

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

$start = microtime(true);

get_bloginfo('homeurl'); // какой-то код

$sec = sprintf('%.6F сек.', microtime(true) - $start );

echo "Время выполнения: $sec"; //> Время выполнения: 0.000014 сек.

Смотрите также специальную функцию: Измерение скорости выполнения php скрипта

к началу

Четное число или нет - проверка в PHP (остаток от деления)

Чтобы узнать четное число или нет, нужно разделить его на 2 и проверить нет ли остатка... А для определения остатка от деления используется арифметический оператор — %.

$a = 11;

// есть остаток
if ( $a % 2 ) {
	echo '$a не четное';
}
// нет остатка
else {
	echo '$a четное';
}

Получаем остаток:

$ostatok = 5 % 2; //> 1
$ostatok = 4 % 2; //> 0
$ostatok = 10 % 6; //> 4

Числа кратные к N или каждый N-ый блок в цикле

Нужно разделить число на число и если остатка нет, то первое число делиться нацело на второе, а значит кратное.

$num = 21;
$n   = 3;
if( ! ($num % $n) ){
	echo "$num кратно $n";
}

Где применить эту кратность?

Допустим, есть цикл записей и нужно к каждому третьему блоку добавить отдельный css класс. Тут-то кратность нам и поможет.

$i = 1;
foreach( $posts a $post ){
	if( ! ($i++ % 3) ){
		// каждый третий блок в цикле
	}
}

Форматирование чисел (денег) в PHP

Для удобного восприятия числа или денежные велечины, лучше выводить с разеделением тысячных групп. Например 9864 понятнее смотрится так: 9 864. Для такого форматирования в PHP есть готовые фукнции:

number_format( $number, $decimals = 0 )
number_format( $number, $decimals = 0, $dec_point = '.' , $thousands_sep = ',' )

Форматирует число с разделением групп.

  • number (обязательный)
    Число, которое нужно отформатировать.

  • decimals
    Сколько знаков после запятой показывать.

  • dec_point
    Разделитель для дробной части.

  • thousands_sep
    Разделитель тысяч.
// английский формат (по умолчанию)
echo number_format( 5555 ); //> 5,555

// русский формат
echo number_format( 5555, 0, ',', ' '); //> 5 555

// французский формат
echo number_format( 5555.55, 2, ',', ' '); //> 5 555,55

Для форматирования с учетом языка сайта в WordPress есть специальная функция number_format_i18n()

Для вывода денежных величин используйте похожую функцию money_format()

к началу

Как получить ключи или значения ассоциативного PHP массива

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

$array = array(
	'key_1' => 'val_1',
	'key_2' => 'val_2',
	'key_3' => 'val_3',
	'key_4' => 'val_4',
	'key_5' => 'val_5'
);

// получение всех ключей массива
$keys = array_keys( $array );
/* Array(
	[0] => key_1
	[1] => key_2
	[2] => key_3
	[3] => key_4
	[4] => key_5
)*/

// получение всех значений массива
$values = array_values( $array );
/* Array(
	[0] => val_1
	[1] => val_2
	[2] => val_3
	[3] => val_4
	[4] => val_5
)*/

Это может пригодится когда нужно сделать поиск по ключам массива. В PHP такой встроенной функции нет.

к началу

Создаем массив из диапазона чисел или букв

Допустим, нужно заполнить пустой массив элементами: числами от 1 до 5 или буквами от a до f.

На такой случай в php есть функция range( $start, $end, $step = 1 ). Она принимает два обязательных и один не обязательный параметр. Обязательные, указывают диапазон, из которого будет заполнен массив, а необязательный определяет шаг между элементами.

$array = range(1, 10);
/* Array(
	[0] => 1
	[1] => 2
	[2] => 3
	[3] => 4
	[4] => 5
	[5] => 6
	[6] => 7
	[7] => 8
	[8] => 9
	[9] => 10
)*/

$array = range(5, -5, 2);
/* Array(
	[0] => 5
	[1] => 3
	[2] => 1
	[3] => -1
	[4] => -3
	[5] => -5
)*/

$array = range('a', 'f');
/* Array(
	[0] => a
	[1] => b
	[2] => c
	[3] => d
	[4] => e
	[5] => f
)*/

$array = range('z', 'a', 3);
/* Array(
	[0] => z
	[1] => w
	[2] => t
	[3] => q
	[4] => n
	[5] => k
	[6] => h
	[7] => e
	[8] => b
)*/
к началу

Округление дробных чисел

Округление до целых

Чтобы округлить число в php существует несколько функций:

  • round($num) - округляет число в большую или меньшую сторону в зависимости от значения дробной части. Если дробная часть больше или равна пяти, то округлит в большую сторону, иначе в меньшую.

  • ceil($num) - независимо от дробной части, округляет в большую сторону.

  • floor($num) - независимо от дробной части, округляет в меньшую сторону.
// round
echo round( 5.2 ); //> 5
echo round( 5.5 ); //> 6
echo round( 5.6 ); //> 6

// ceil
echo ceil( 5.1 );  //> 6

// floor
echo floor( 5.9 ); //> 5

Округление до дробных

Для округления чисел, до определенного количество знаков после запятой, используем функцию round(). Во втором параметре нужно указать сколько оставить знаков после запятой.

echo $round = round( 5.555, 1 ); //> 5.6

echo $round = round( 5.555, 2 ); //> 5.56

Округление последнего числа происходит как в математики: если следующее больше или равно 5 то в большую сторону, в остальных случаях в меньшую...

к началу

Целая часть и остаток от деления чисел

Чтобы получить целую часть от деления можно воспользоваться функцией intval() или префиксом (int).

$a = 5;
$b = 2;

$celoe   = intval($a / $b); //> 2
$celoe   = (int) ($a / $b); //> 2

Как получить максимальное или минимальное число из массива в PHP

Для определения максимального и минимального числа в php есть две удобные функции: min() и max(). Они могут принимать любое количество чисел и возвращать минимальное или максимально из них.

Также можно передать массив из чисел, тогда мин. или макс. число будет выбрано из значений массива.

// Пример 1
$min = min( 1, 6 ); //> 1
$max = max( 1, 6 ); //> 6

// Пример 2
$min = min( 1, 2, -5, 6, 0, -8, 7 ); //> -8
$max = max( 1, 2, -5, 6, 0, -8, 7 ); //> 7

// Пример 3 - массивы
$min = min( [1, 6] ); //> 1
$max = max( [1, 6] ); //> 6

Как получить часть строки (подстроку)

Чтобы получить подстроку можно использовать: substr(), iconv_substr() или mb_substr().

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

Однако нужно знать, что скорость их работы в разы ниже: substr() работает с одинаковой скоростью для строки любой длинны. А вот mb_substr() и iconv_substr() работают тем медленнее чем длине строка в них указывается... В среднем они в 5-10 раз медленнее, однако альтернатив нет, если нужно обработать кириллицу, придется использовать их...

// синтаксис:
// mb_substr ( $string, $start, $length, $encoding )

$str = "Поиск текстов";

// 3 символа начиная с третьего (отсчет идет от нуля)
$sub_1 = mb_substr( $str, 2, 3 ); // обычно кодировку указывать не обязательно...

// Берем подстроку, начиная с первого символа и до третьего с конца
$sub_2 = mb_substr( $str, 6, -2, 'utf-8' );

// результат
echo $sub_1 .' - '. $sub_2; //> бой - текст

Всевозможные варианты:

// Латиница
$str = 'abcdef';

echo substr( $str, 1);     // bcdef
echo substr( $str, 1, 3);  // bcd
echo substr( $str, 0, 4);  // abcd
echo substr( $str, 0, 8);  // abcdef
echo substr( $str, -1, 1); // f

// Кириллица
$str = 'абвгдеж';

echo mb_substr( $str, 1);     // бвгдеж
echo mb_substr( $str, 1, 3);  // бвг
echo mb_substr( $str, 0, 4);  // абвг
echo mb_substr( $str, 0, 8);  // абвгдеж
echo mb_substr( $str, -1, 1); // ж

// с указанием кодировки, обычно это не обязательно
echo mb_substr( $str, 1, null, 'utf-8'); // бвгдеж
echo mb_substr( $str, 1, 3, 'utf-8');    // бвг
echo mb_substr( $str, 0, 4, 'utf-8');    // абвг
echo mb_substr( $str, 0, 8, 'utf-8');    // абвгдеж
echo mb_substr( $str, -1, 1, 'utf-8');   // ж

// iconv_substr(), обычно для нее нужно указать кодировку
// iconv_* медленнее чем mb_*
echo iconv_substr( $str, 1, 9999999, 'utf-8'); // бвгдеж
echo iconv_substr( $str, 1, 3, 'utf-8');       // бвг
echo iconv_substr( $str, 0, 4, 'utf-8');       // абвг
echo iconv_substr( $str, 0, 8, 'utf-8');       // абвгдеж
echo iconv_substr( $str, -1, 1, 'utf-8');      // ж
к началу

Количество символов в строке

Чтобы посчитать количество символов в строке есть три функции: strlen(), mb_strlen() и iconv_strlen(). Первая это родная функция PHP и она будет правильно работать только для латиницы. Две другие функции работают на основе подключаемого расширения для PHP и нужны для подсчета кириллицы или других языков. В них можно указать кодировку строки.

$str = 'Короткая строка.'; // тут 16 символов

// узнаем длину строки
echo strlen( $str ); // > 30

echo mb_strlen( $str ); // > 16
echo mb_strlen( $str, 'utf-8' ); // > 16

// iconv_* медленнее чем mb_*
echo iconv_strlen( $str ); // > 30
echo iconv_strlen( $str, 'utf-8' ); // > 16
к началу

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

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

$str = 'исходная строка для примера подсчета подстрок';
$sub_str = 'стр'; // искомая подстрока

// подсчет
$count    = substr_count( $str, $sub_str );            //> 2
$mb_count = mb_substr_count( $str, $sub_st );          //> 2
$mb_count = mb_substr_count( $str, $sub_str, "UTF-8"); //> 2

Удаление символов внутри строки

Сделать это можно многими способами, но самый простой это функция str_replace():

$str = 'Короткая строка.';

// заменим слово
echo str_replace( 'Короткая', 'Длинная', $str ); //> Длинная строка.

// удалим точку
echo str_replace( '.', '', $str ); //> Короткая строка

Удаление символов на концах строки

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

Также, не все знают что есть аналогичные функции:

  • rtrim() — удаляет только справа строки
  • ltrim() — удаляет только слева строки
Удаление пустых символов на концах строки
$str = '     Короткая строка.  ';

// Удалим все пустые символы: таб, пробел, перенос
echo trim( $str ); // 'Короткая строка.'

// Удалим все пустые символы справа
echo rtrim( $str ); // '   Короткая строка.'

// Удалим слева
echo ltrim( $str ); // 'Короткая строка.  '
Удаление указанных символов в начале и конце строки
$str = '1122Короткая строка.2211';

// Удалим один символ
echo trim( $str, '1' ); // '22Короткая строка.22'

// Удалим несколько символов
echo trim( $str, '12' ); // 'Короткая строка.'
echo trim( $str, '21' ); // 'Короткая строка.'

// тоже самое только на концах строки

// Удалим справа
echo rtrim( $str, '1' ); // '1122Короткая строка.22'
echo rtrim( $str, '21' ); // '1122Короткая строка.'

// Удалим слева
echo ltrim( $str, '1' ); // '22Короткая строка.2211'
echo ltrim( $str, '21' ); // 'Короткая строка.2211'
к началу

Как перевернуть строку в PHP

Для вывода строки в обратном (реверсивном) порядке есть функция strrev(). Но, как и многие функции она не умеет работать с кириллицей. Альтернативных функций, вроде mb_strlen() нет. Поэтому давайте создадим свою:

// исходная строка
$string_lat = 'some string';
$string_cry = 'какая-то строка';

// переворачиваем
echo strrev( $string_lat ); //> gnirts emos

// переворачиваем строку в кодировке UTF-8
$mb_strrev = '';
for( $i = mb_strlen($string_cry, "UTF-8"); $i >= 0; $i-- ){
	$mb_strrev .= mb_substr( $string_cry, $i, 1, "UTF-8" );
}

echo $mb_strrev; //> акортс от-яакак

День недели и месяц по-русски на PHP

В php, функция date(), умеет выводить дату и время в огромном количестве форматов, но, к сожалению, вывод по-русски не предусмотрен. Поэтому для вывода дня недели или месяца по-русски, необходимо написать свою функцию.

Месяц по-русски

/**
 * функция для получения названия месяца по-русски.
 * 
 * @param  integer [$num_month = false] Номер месяца, необязательный параметр, если параметр не задан,
 *                                      то функция вернет название текущего месяца.
 * @return string Название месяца
 */
function get_rus_month( $num_month = 0 ) {
	// если не задан номер месяца
	if( ! $num_month ) {
		$num_month = date('n'); // номер текущего месяца
	}

	// массив с названиями месяцев
	$monthes = array('', 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');

	return $monthes[ $num_month ];
}

// пример использования
echo get_rus_month(1); // Январь
echo get_rus_month();  // Апрель

День недели

## получает день недели по-русски
function get_rus_day(){
	 $days = array('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота' );

	// номер дня недели: с 0 до 6. 0 - воскресенье, 6 - суббота
	$num_day = date('w');

	return $days[ $num_day ];
}

// пример использования
echo get_rus_day(); //> Среда

-

Есть что добавить? Милости прошу в комментарии...

Полезные PHP коды - для новичков Комментариев нет

Здравствуйте, !

Ваш комментарий