What is the simplest most basic way to find out if a number/variable is odd or even in PHP?
Is it something to do with mod?
I’ve tried a few scripts but.. google isn’t delivering at the moment.
Tim Cooper
157k38 gold badges327 silver badges279 bronze badges
asked Oct 31, 2011 at 20:17
2
You were right in thinking mod was a good place to start. Here is an expression which will return true if $number
is even, false if odd:
$number % 2 == 0
Works for every integerPHP value, see as well Arithmetic OperatorsPHP.
Example:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
Output:
It’s even
answered Oct 31, 2011 at 20:18
Tim CooperTim Cooper
157k38 gold badges327 silver badges279 bronze badges
7
Another option is a simple bit checking.
n & 1
for example:
if ( $num & 1 ) {
//odd
} else {
//even
}
answered Feb 5, 2012 at 23:10
Pawel DubielPawel Dubiel
18.4k3 gold badges40 silver badges58 bronze badges
4
Yes using the mod
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
answered Oct 31, 2011 at 20:19
Aaron W.Aaron W.
9,2442 gold badges33 silver badges45 bronze badges
While all of the answers are good and correct, simple solution in one line is:
$check = 9;
either:
echo ($check & 1 ? 'Odd' : 'Even');
or:
echo ($check % 2 ? 'Odd' : 'Even');
works very well.
answered May 9, 2016 at 15:58
TarikTarik
4,22037 silver badges35 bronze badges
1
(bool)($number & 1)
or
(bool)(~ $number & 1)
answered Jan 16, 2013 at 10:16
OlegsOlegs
811 silver badge1 bronze badge
4
I did a bit of testing, and found that between mod, is_int
and the &
-operator, mod is the fastest, followed closely by the &-operator.
is_int
is nearly 4 times slower than mod.
I used the following code for testing purposes:
$number = 13;
$before = microtime(true);
for ($i=0; $i<100000; $i++) {
$test = ($number%2?true:false);
}
$after = microtime(true);
echo $after-$before." seconds mod<br>";
$before = microtime(true);
for ($i=0; $i<100000; $i++) {
$test = (!is_int($number/2)?true:false);
}
$after = microtime(true);
echo $after-$before." seconds is_int<br>";
$before = microtime(true);
for ($i=0; $i<100000; $i++) {
$test = ($number&1?true:false);
}
$after = microtime(true);
echo $after-$before." seconds & operator<br>";
The results I got were pretty consistent. Here’s a sample:
0.041879177093506 seconds mod
0.15969395637512 seconds is_int
0.044223070144653 seconds & operator
answered Aug 22, 2013 at 10:15
Ruben CoolenRuben Coolen
3761 gold badge5 silver badges13 bronze badges
2
Another option is to check if the last digit is an even number :
$value = "1024";// A Number
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($value, -1),$even)){
// Even Number
}else{
// Odd Number
}
Or to make it faster, use isset()
instead of array_search
:
$value = "1024";// A Number
$even = array(0 => 1, 2 => 1, 4 => 1, 6 => 1, 8 => 1);
if(isset($even[substr($value, -1)]){
// Even Number
}else{
// Odd Number
}
Or to make it more faster (beats mod operator
at times) :
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
// Even Number
}else{
// Odd Number
}
Here is the time test as a proof to my findings.
answered Oct 10, 2013 at 16:40
SubinSubin
3,4261 gold badge34 silver badges63 bronze badges
8
PHP is converting null and an empty string automatically to a zero. That happens with modulo as well. Therefor will the code
$number % 2 == 0 or !($number & 1)
with value $number = » or $number = null
result in true.
I test it therefor somewhat more extended:
function testEven($pArg){
if(is_int($pArg) === true){
$p = ($pArg % 2);
if($p === 0){
print "The input '".$pArg."' is even.<br>";
}else{
print "The input '".$pArg."' is odd.<br>";
}
}else{
print "The input '".$pArg."' is not a number.<br>";
}
}
The print is there for testing purposes, hence in practice it becomes:
function testEven($pArg){
if(is_int($pArg)=== true){
return $pArg%2;
}
return false;
}
This function returns 1 for any odd number, 0 for any even number and false when it is not a number. I always write === true or === false to let myself (and other programmers) know that the test is as intended.
answered Jun 1, 2015 at 8:12
Loek BergmanLoek Bergman
2,17220 silver badges18 bronze badges
7
All even numbers divided by 2 will result in an integer
$number = 4;
if(is_int($number/2))
{
echo("Integer");
}
else
{
echo("Not Integer");
}
answered Jul 5, 2012 at 19:39
1
I am making an assumption that there is a counter already in place. in $i which is incremented at the end of a loop, This works for me using a shorthand query.
$row_pos = ($i & 1) ? 'odd' : 'even';
So what does this do, well it queries the statement we are making in essence $i is odd, depending whether its true or false will decide what gets returned. The returned value populates our variable $row_pos
My use of this is to place it inside the foreach loop, right before i need it, This makes it a very efficient one liner to give me the appropriate class names, this is because i already have a counter for the id’s to make use of later in the program. This is a brief example of how i will use this part.
<div class='row-{$row_pos}'> random data <div>
This gives me odd and even classes on each row so i can use the correct class and stripe my printed results down the page.
The full example of what i use note the id has the counter applied to it and the class has my odd/even result applied to it.:
$i=0;
foreach ($a as $k => $v) {
$row_pos = ($i & 1) ? 'odd' : 'even';
echo "<div id='A{$i}' class='row-{$row_pos}'>{$v['f_name']} {$v['l_name']} - {$v['amount']} - {$v['date']}</div>n";
$i++;
}
in summary, this gives me a very simple way to create a pretty table.
answered Jul 13, 2014 at 19:28
Try this,
$number = 10;
switch ($number%2)
{
case 0:
echo "It's even";
break;
default:
echo "It's odd";
}
answered May 24, 2016 at 23:59
1
$before = microtime(true);
$n = 1000;
$numbers = range(1,$n);
$cube_numbers = array_map('cube',$numbers);
function cube($n){
$msg ='even';
if($n%2 !=0){
$msg = 'odd';
}
return "The Number is $n is ".$msg;
}
foreach($cube_numbers as $cube){
echo $cube . "<br/>";
}
$after = microtime(true);
echo $after-$before. 'seconds';
answered Feb 13, 2016 at 9:39
$number %2 = 1 if odd… so don’t have to use not even…
$number = 27;
if ($number % 2 == 1) {
print "It's odd";
}
answered Apr 7, 2021 at 15:28
jxwdjxwd
1792 silver badges6 bronze badges
<?php
// Recursive function to check whether
// the number is Even or Odd
function check($number){
if($number == 0)
return 1;
else if($number == 1)
return 0;
else if($number<0)
return check(-$number);
else
return check($number-2);
}
// Check the number odd or even
$number = 35;
if(check($number))
echo "Even";
else
echo "Odd";
?>
So, the output will be Odd
answered Aug 20, 2021 at 10:52
BalajiBalaji
271 silver badge7 bronze badges
1
Using Bit Manipulation:
In this method, you will find bit-wise AND of the number with 1. If the bit-wise AND is 1, then the number is odd, else even.
function odd($var){
return $var & 1;
}
function even($var){
return !($var&1);
}
$arr = range(1,10);
echo "Odd Numbers: ";
echo "<pre>";
print_r(array_filter($arr2, 'odd'));
echo "<pre>";
echo "<br>Even Numbers: ";
echo "<pre>";
print_r(array_filter($arr2, 'even'));
echo "</pre>";
The output will be:
Odd Numbers:
Array
(
[0] => 1
[2] => 3
[4] => 5
[6] => 7
[8] => 9
)
Even Numbers:
Array
(
[1] => 2
[3] => 4
[5] => 6
[7] => 8
[9] => 10
)
answered Nov 3, 2022 at 11:54
Rashed HasanRashed Hasan
3,70910 gold badges40 silver badges81 bronze badges
1
//checking even and odd
$num =14;
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
if($even){
echo "Number is even.";
} else {
echo "Number is odd.";
}
answered Apr 19, 2018 at 6:55
Imran AzimImran Azim
1541 silver badge8 bronze badges
1
Try this one with #Input field
<?php
//checking even and odd
echo '<form action="" method="post">';
echo "<input type='text' name='num'>n";
echo "<button type='submit' name='submit'>Check</button>n";
echo "</form>";
$num = 0;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["num"])) {
$numErr = "<span style ='color: red;'>Number is required.</span>";
echo $numErr;
die();
} else {
$num = $_POST["num"];
}
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
if ($num > 0){
if($even){
echo "Number is even.";
} else {
echo "Number is odd.";
}
} else {
echo "Not a number.";
}
}
?>
answered Apr 19, 2018 at 9:40
Imran AzimImran Azim
1541 silver badge8 bronze badges
3
Two simple bitwise functions, returning a 0 for False and 1 for True.
# is_odd: 1 for odd , 0 for even
odd = number & 1
# is_even: 1 for even , 0 for odd
even = number & 1 ^ 1
Syscall
19.2k10 gold badges36 silver badges52 bronze badges
answered Feb 15, 2022 at 19:18
Добрый день, ув. Про!
Подскажите пожалуйста, как силами исключительно PHP определить четным или не четным будет число какое-либо число месяца в будущем.
Например, с клавиатуры вводим: 22.08.2015. Как узнать, будет оно четным или нет?
задан 16 мая 2015 в 13:12
function even($var)
{
// является ли переданное число четным
return !($var & 1);
}
ответ дан 15 окт 2019 в 6:40
2
Число из даты такого формата можно получить функциями explode()
или strtok()
.
Остаток от деления в РНР получают оператором %
ответ дан 16 мая 2015 в 13:20
ИпатьевИпатьев
20.2k3 золотых знака26 серебряных знаков49 бронзовых знаков
Не уверен правильно ли, но как-то так:
function dateCheker($var)
{
$date = strtotime($var);
$day = date('d', $date);
if ($day % 2 === 0) {
print "even";
} else {
print "odd";
}
}
dateCheker('23.08.2015');
ответ дан 16 мая 2015 в 13:30
Ihor TkachukIhor Tkachuk
1,2761 золотой знак8 серебряных знаков12 бронзовых знаков
1
$num = 1; //Число
if($num % 2 === 0)
echo 'Четное';
else
echo 'Нечетное';
ответ дан 16 мая 2015 в 13:52
VamigVamig
334 бронзовых знака
Перейти к содержимому
Проверка числа на четность и нечетность. Введение
В работе, я уже неоднократно сталкивался с необходимостью проверки числа на четность и нечетность, но почему-то не придавал этому особого значения, поэтому не затрагивал данную тему ранее. Но мне уже несколько раз присылали вопросы и просили помочь с задачами, в которых проверка четности числа может помочь в реализации. Поэтому я решил описать проблему и решение в статье.
Рассмотрим самую распространенную задачу, в которой проверка четности числа может все расставить на свои места. Допустим, у нас имеется массив данных, в котором хранится имена и фамилии людей. Необходимо вывести эти данные таким образом, чтобы каждое имя и фамилия начинались с новой строки и каждая вторая строка имела отступ 20 пикселей.
Решение задачи:
Необходимо при выводе каждого элемента массива считать номер элемента, если он четный, то есть 2, 4, 6 и тд, то будем делать отступы.
Проверка числа на четность и нечетность. Код
// массив данных $array_users = array( "Иван Иванов", "Иван Петров", "Петр Иванов", "Петр Петров", "Сидор Иванов", "Сидор Петров" ); // вывод данных $num = 1; foreach($array_users as $value){ // проверяем четность if(($num % 2) == 0){ // если четное, то делаем отступ echo "<span style='padding-left: 20px;'>$value</span><br/>"; }else{ // если не четное, то просто выводим echo "<span>$value</span><br/>"; } $num ++; }
Задача решена.
Вся суть сводится к тому, что необходимо проверить остаток от деления числа на два. если остаток равен нулю, значит число четное.
$a = 5; if(($a % 2) == 0){ echo "Число четное"; }else{ echo "Число не четное"; }
С помощью такого же кода, можно добавлять стили для каждого третьего, каждого четвертого и тд элемента, только уже сравнивать остаток после деления на 2, 3, 4 и тд.
«четное/нечетное число php«. Определим с помощью php является ли число четным либо нечетным!
Подробно о четном/нечетном числе в php/
- Определяем в php четное число:
- Выполнение кода проверки четного/нечетного числа php 2
- Функция определения четного/нечетного числа php
Определяем в php четное число:
Не буду повторять, что такое четное число смотрим здесь.
Из выше изложенной ссылке вы узнали, что любое число, которое делится без остатка на 2 будет четным, для этого вам понадобится php и:
Немного теории о делении без остатка в php.
Если вы прочитали выше приведенную теорию, то узнали, что если вы напишите вот такую конструкцию:
if(«ваше число» % 2 == 0) echo ‘число четное определено php’;
else echo ‘число не четное определено php’;
Примеры определения четного/нечетного числа php
Теперь, в примере рассмотрим код определения «четного/нечетного числа php«, возьмем выше приведенный код и заменим ваше число на … например на 2:
<?
if(2 % 2 == 0) echo 'число четное определено php';
else echo 'число не четное определено php';
?>
Выполнение кода проверки четного/нечетного числа php
Разместим выше приведенный код прямо здесь:
число четное определено php
Аналогичный пример кода проверки четного/нечетного числа php
Используем число 3:
<?
if(3 % 2 == 0) echo 'число четное определено php';
else echo 'число не четное определено php';
?>
Выполнение кода проверки четного/нечетного числа php
число не четное определено php
Выполнение кода проверки четного/нечетного числа php 2
И второй пример определения четности/нечетности числа php… нахождение точки в случае деления с остатком… для этого вам понадобится:
Условие if.
Поиск совпадений -substr_count;
+ добавим знак «собачки @», потому, что «substr_count» выдает ошибку если не находит…
Простой код поиска четности, т.е. точки в числе…
Код проверки четности/нечетности числа php:
<?
$var = 1.5;
if(@substr_count($var , '.')) echo 'число не четное определено php';
else echo 'число четное определено php';
?>
Выполнение кода проверки четного/нечетного числа php
Далее выведем данный код прямо здесь:
число не четное определено php
Код №2 проверки четности/нечетности числа php:
Второй пример… возьмем тот же код и в переменную поместим число 2:
<?
$var = 2;
if(@substr_count($var , '.')) echo 'число не четное определено php';
else echo 'число четное определено php';
?>
Выполнение кода проверки четного/нечетного числа php
Определяем число 2 будет ли четным/нечетным:
число четное определено php
Функция определения четного/нечетного числа php
Если вам часто приходится определять — это четное/нечетное число в php? то вма нужна функция, которая сомжет это сделать и не нужно на каждое число писать выше приведенный код
Пример функции определения четного/нечетного числа php
<?
function isEven($e)
{
$e = $e/2;
if(substr_count($e, '.')) return 'число не четное определено php ';
else return 'число четное определено php ';
}
echo 'Число 2 : ' .isEven(2) ;
echo 'Число 3 : ' .isEven(3) ;
?>
Выведем результат работы функции определения четного/нечетного числа php
Число 2 : число четное определено php
Число 3 : число не четное определено php
Не благодарите, но ссылкой можете поделиться!
COMMENTS+
BBcode
При написании кода в PHP есть задачи, которые встречаются чаще остальных или просто как-то выделяются из общего множества. В этой статье поговорим о некоторых из них.
Тут собрана лишь малая часть, и наверное это не последняя статья на тему несложных популярных задачек в PHP. Кроме того, я планирую дополнять эту статью…
В общем, не буду никого ни за что тянуть и перейду сразу к кодам, которые, я надеюсь, будут полезны новичкам: кто что для себя найдет — все ваше
Короткая запись операторов присваивания
Когда нужно что-то прибавить, отнять или объединить, то для краткости можно использовать сокращения в операторе =
— операторе присваивания:
// полная запись, а под ней тоже самое только кратко $a = $a + 1; $a = $a + 5; $a = $a - $b; $a = $a . 'текст'; $a++; $a += 5; $a -= $b; $a .= 'текст';
Время выполнения PHP скрипта
Build In Post
Иногда бывает нужно замерить время выполнения отельного куска кода в PHP. Сделать это не сложно, ниже разберемся как.
Простой вариант
Замерить скорость выполнения какой-то отдельной его части PHP кода, можно с помощью встроенной в PHP функции microtime( true )
. Функция вернет UNIX штамп времени в микросекундах. Параметр true говорит функции вернуть число, а не строку, чтобы можно было потом просто отнять одно число от другого.
Логика проста: сначала замеряем текущее время в микросекундах, выполняем код, опять замеряем текущее время и высчитываем разницу времени — эта разница и будет временем выполнения кода. С помощью функции sprintf()
форматируем результат в более читаемый формат.
$start = microtime( true ); get_bloginfo( 'homeurl' ); // какой-то код $diff = sprintf( '%.6f sec.', microtime( true ) - $start ); echo "Время выполнения: $diff"; // Время выполнения: 0.000014 sec.
Вариант посложнее
Для измерения скорости работы PHP кода, когда-то написал такую функцию:
/** * Считает время выполнения PHP кода (в секундах). * * exec_time(); * // код * echo exec_time('get') .' сек.'; //> 0.03654 сек. * * @version 3.4.5 * * @param string $phase run - включает подсчет: первый раз или после паузы (по умолчанию). * start - очищает все кэши и включает подсчет - clear & run. * get - получает разницу, между предыдущим вызовом функции. * getall|end|stop - получает разницу, между первым вызовом функции (run). * pause - временная остановка подсчета. exec_time() для продолжения. * clear - полностью очищает результат. exec_time() для начала нового подсчета. * @param int $round До скольки знаков после запятой округлять результат. * * @return float|void Example 0.03654 */ function exec_time( $phase = 'run', $round = 6 ){ static $prev_time, $collect; if( 'start' === $phase ){ $collect = $prev_time = 0; } elseif( 'clear' === $phase ){ return $collect = $prev_time = 0; } list( $usec, $sec ) = explode( ' ', microtime() ); $mctime = bcadd( $usec, $sec, 8 ); if( $prev_time ){ $exectime = $mctime - $prev_time; // bcsub( $mctime, $prev_time, 8 ); $collect += $exectime; // bcadd( $collect, $exectime, 8 ); } $prev_time = $mctime; if( 'pause' === $phase ){ $prev_time = 0; } elseif( 'get' === $phase ){ return round( $exectime, $round ); } elseif( false !== strpos( 'getall end stop', $phase ) ){ return round( $collect, $round ); } }
Если замеряете отдельные быстрые функции, например: __(), то можно повторять выполнение для наглядности. Например, замерим работу __()
:
exec_time(); for( $i=1; $i<50000; $i++ ){ $r = __( 'Settings', 'default' ); } echo exec_time('get') .'сек.'; // 0.51650 сек.
—
Округление дробных чисел
Округление до целых
Чтобы округлить число в 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).
$celoe = intval(5 / 2); //> 2 $celoe = (int) (5 / 2); //> 2
Чтобы получить остаток от деления можно воспользоваться оператором %:
$ostatok = (5 % 2); //> 1
Четное число или нет — проверка в 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
Для вывода денежных величин используйте похожую функцию 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
Для определения максимального и минимального числа в 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(); //> Среда
—
Есть что добавить? Милости прошу в комментарии…