Php номер по порядку

list

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

Замечание:

До PHP 7.1.0, list() работала только с индексированными массивами и принимала числовые индексы начиная с 0.

Список параметров

Возвращаемые значения

Возвращает присвоенный массив.

Список изменений

Версия Описание
7.3.0 Добавлена поддержка присвоения по ссылкам при деструктурировании массива.
7.1.0 Теперь возможно задавать ключи в list() . Это позволяет разыменовывать ассоциативные массивы и массивы с индексами не по порядку.

Примеры

Пример #1 Примеры использования list()

$info = array( ‘кофе’ , ‘коричневый’ , ‘кофеин’ );

// Составить список всех переменных
list( $drink , $color , $power ) = $info ;
echo » $drink — $color , а $power делает его особенным.\n» ;

// Составить список только некоторых из них
list( $drink , , $power ) = $info ;
echo «В $drink есть $power .\n» ;

// Или пропустить все, кроме третьей
list( , , $power ) = $info ;
echo «Мне нужен $power !\n» ;

// list() не работает со строками
list( $bar ) = «abcde» ;
var_dump ( $bar ); // NULL
?>

Пример #2 Пример использования list()

$result = $pdo -> query ( «SELECT id, name FROM employees» );
while (list( $id , $name ) = $result -> fetch ( PDO :: FETCH_NUM )) echo «id: $id , name: $name \n» ;
>
?>

Пример #3 Использование list() с индексами массивов

list( $a , list( $b , $c )) = array( 1 , array( 2 , 3 ));

Пример #4 list() и порядок указания индексов

Порядок, в котором индексы массива будут использоваться функцией list() , не имеет значения.

$foo = array( 2 => ‘a’ , ‘foo’ => ‘b’ , 0 => ‘c’ );
$foo [ 1 ] = ‘d’ ;
list( $x , $y , $z ) = $foo ;
var_dump ( $foo , $x , $y , $z );

Производит такой вывод (обратите внимание, на порядок, в котором элементы были перечислены в синтаксисе list() и на порядок вывода):

array(4) < [2]=>string(1) "a" ["foo"]=> string(1) "b" [0]=> string(1) "c" [1]=> string(1) "d" > string(1) "c" string(1) "d" string(1) "a"

Пример #5 list() с ключами

Начиная с PHP 7.1.0, для list() можно задавать конкретные ключи, которые могут быть произвольными выражениями. Допустимо смешивать строковые и числовые ключи. Однако элементы с ключами и без ключей не могут быть использоваться одновременно.

$data = [
[ «id» => 1 , «name» => ‘Tom’ ],
[ «id» => 2 , «name» => ‘Fred’ ],
];
foreach ( $data as [ «id» => $id , «name» => $name ]) echo «id: $id , name: $name \n» ;
>
echo PHP_EOL ;
list( 1 => $second , 3 => $fourth ) = [ 1 , 2 , 3 , 4 ];
echo » $second , $fourth \n» ;

Результат выполнения данного примера:

id: 1, name: Tom id: 2, name: Fred 2, 4

Смотрите также

  • each() — Возвращает текущую пару ключ/значение из массива и смещает его указатель
  • array() — Создаёт массив
  • extract() — Импортирует переменные из массива в текущую таблицу символов

User Contributed Notes 25 notes

Since PHP 7.1, keys can be specified

exemple :
$array = [ ‘locality’ => ‘Tunis’ , ‘postal_code’ => ‘1110’ ];

list( ‘postal_code’ => $zipCode , ‘locality’ => $locality ) = $array ;

print $zipCode ; // will output 1110
print $locality ; // will output Tunis
?>

In PHP 7.1 we can do the following:

[ $a , $b , $c ] = [ ‘a’ , ‘b’ , ‘c’ ];
?>

Before, we had to do:

$info = array(‘kawa’, ‘brązowa’, ‘kofeina’);
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);

One thing to note here is that if you define the array earlier, e.g.:
$a = [0, 0, 0];

the indexes will be kept in the correct order:

Thought that it was worth mentioning.

As noted, list() will give an error if the input array is too short. This can be avoided by array_merge()’ing in some default values. For example:

$parameter = ‘name’ ;
list( $a , $b ) = array_merge ( explode ( ‘=’ , $parameter ), array( true ) );
?>

However, you will have to array_merge with an array long enough to ensure there are enough elements (if $parameter is empty, the code above would still error).

An alternate approach would be to use array_pad on the array to ensure its length (if all the defaults you need to add are the same).

$parameter = ‘bob-12345’ ;
list( $name , $id , $fav_color , $age ) = array_pad ( explode ( ‘-‘ , $parameter ), 4 , » );
var_dump ( $name , $id , $fav_color , $age );
/* outputs
string(3) «bob»
string(5) «12345»
string(0) «»
string(0) «»
*/
?>

The example states the following:
// list() doesn’t work with strings
list( $bar ) = «abcde» ;
var_dump ( $bar );
// output: NULL
?>

If the string is in a variable however, it seems using list() will treat the string as an array:
$string = «abcde» ;
list( $foo ) = $string ;
var_dump ( $foo );
// output: string(1) «a»
?>

/**
* It seems you can skip listed values.
* Here’s an example to show what I mean.
*
* FYI works just as well with PHP 7.1 shorthand list syntax.
* Tested against PHP 5.6.30, 7.1.5
*/
$a = [ 1 , 2 , 3 , 4 ];

// this is quite normal use case for list
echo «Unpack all values\n» ;
list( $v1 , $v2 , $v3 , $v4 ) = $a ;
echo » $v1 , $v2 , $v3 , $v4 \n» ;
unset( $v1 , $v2 , $v3 , $v4 );

// this is what I mean:
echo «Skip middle\n» ;
list( $v1 , , , $v4 ) = $a ;
echo » $v1 , $v2 , $v3 , $v4 \n» ;
unset( $v1 , $v2 , $v3 , $v4 );

echo «Skip beginning\n» ;
list( , , $v3 , $v4 ) = $a ;
echo » $v1 , $v2 , $v3 , $v4 \n» ;
unset( $v1 , $v2 , $v3 , $v4 );

echo «Skip end\n» ;
list( $v1 , $v2 , , ) = $a ;
echo » $v1 , $v2 , $v3 , $v4 \n» ;
unset( $v1 , $v2 , $v3 , $v4 );

echo «Leave middle\n» ;
list( , $v2 , $v3 , ) = $a ;
echo » $v1 , $v2 , $v3 , $v4 \n» ;
unset( $v1 , $v2 , $v3 , $v4 );

list() can be used with foreach

$array = [[ 1 , 2 ], [ 3 , 4 ], [ 5 , 6 ]];

foreach( $array as list( $odd , $even )) echo » $odd is odd; $even is even» , PHP_EOL ;
>
?>

The output:
===
1 is odd; 2 is even
3 is odd; 4 is even
5 is odd; 6 is even

The list construct seems to look for a sequential list of indexes rather taking elements in sequence. What that obscure statement means is that if you unset an element, list will not simply jump to the next element and assign that to the variable but will treat the missing element as a null or empty variable:

The list() definition won’t throw an error if your array is longer then defined list.

list( $a , $b , $c ) = array( «a» , «b» , «c» , «d» );

var_dump ( $a ); // a
var_dump ( $b ); // b
var_dump ( $c ); // c
?>

Don’t miss simple array pattern matching since php 7

[ $a ] = [ ‘hello!’ ];
var_dump ( $a ); // ‘hello!’

$arr = [ 4 => 50 ];
[ 4 => $fifty ] = $arr ;
var_dump ( $fifty ); // 50

$multidimensionalArray = [[ ‘id’ => 15 , ’email’ => ‘diyor024@gmail.com’ ]];
[[ ‘id’ => $id , ’email’ => $email ]] = $multidimensionalArray ;
var_dump ( $id , $email ); // 15 diyor024@gmail.com

For PHP 7.1 on, the documentation states that integer and string keys can be mixed, but that elements with and without keys cannot. Here is an example, using data from getimagesize() with mixed keys:

$data =[
0 => 160 ,
1 => 120 ,
2 => 2 ,
3 => ‘width=»160″ height=»120″‘ ,
‘mime’ => ‘image/jpeg’
];
list( 0 => $width , 1 => $height , 2 => $type , 3 => $dimensions , ‘mime’ => $mime )= $data ;
?>

Here, the numeric keys also need to be specified, as if the whole array is treated as an associative array.

As noted elsewhere, the list() operator can be written in array format:

[ 0 => $width , 1 => $height , 2 => $type , 3 => $dimensions , ‘mime’ => $mime ]= $data ;
?>

Setting it like does _not_ raise an E_NOTICE (or other error) and afaics effectively equals an https://php.net/function.unset of $var1,$varN.

I note this as contrasting with the fact that PHP triggers an E_NOTICE about «Undefined offset» «if there aren’t enough array elements to fill the list()», as attow documented for https://php.net/control-structures.foreach#control-structures.foreach.list and here only noted in https://php.net/function.list#122951 by Mardaneus.

For completeness, a bash(1) (v5.0 or 4.3 on macos10.13) cli test producing the same result for all my PHP-versions (installed via macports.org) follows. It’s also tested with php7.3 using bash5.0 on Debian10:
bash —noprofile —norc -c ‘for php in php,>;do for literal in «array()» null;do echo -n $php …=$literal:&&$php -n -d error_reporting=E_ALL -r «var_dump(list(\$var)=$literal);»;done;done’

# Above produces the same result pairs per version from:
php53 …=array():
Notice: Undefined offset: 0 in Command line code on line 1
array(0) >
# . to:
php73 …=null:NULL

This is something I haven’t seen in documentation.

Since PHP 7.1, you can use short-hand list unpacking using square brackets, just like short-hand array declaration:

// short-hand array definition
[ $a , $b , $c ] = $foo ;
echo $a ; // displays «a»

// it’s same like:
list( $x , $y , $z ) = $foo ;
echo $x ; // displays «a»

Источник

Порядковый номер строки

Всем доброго времени суток!
Не могу нигде найти работающего варианта вывода порядкового номера строки в цикле.

$query = mysql_query ("SELECT * FROM `user` WHERE `status` = 'active' "); while ($user=mysql_fetch_assoc($query)) { $username = $user['username']; echo "?Порядковый номер? (точка) $username"; }

В итоге хочу, чтобы получилось так:

1. Иванов
2. Петров
3. Сидоров
.

Заранее спасибо за помощь

Добавлено через 16 минут
Уже сделал сам, кому понадобится, вот как:

$query = mysql_query ("SELECT * FROM `user` WHERE `status` = 'active' "); $i = 0; while ($user=mysql_fetch_assoc($query)) { $i++; $username = $user['username']; echo "$i. $username"; }

Дописать порядковый номер в конец каждой строки
Здравствуйте. Подскажите пожалуйста как дописать в конец каждой строки, её порядковый номер.

Перед каждым символом поставить порядковый номер в тексте
Здравствуйте,может кто нибудь помочь задачу решить?Вот: Перед каждым символом поставить порядковый.

Перед каждым символом поставить порядковый номер в тексте
Перед каждым символом поставить порядковый номер в тексте. Текст находится в заданном.

Как получить порядковый номер записи в запросе SQL
Есть какая то выборка из базы. Нужно узнать порядковый номер записи, удовлетворяющей определенным.

А потом выводить можно было бы так

 for($i=0;$i  count($username);$i++) { echo $i.' '.$username[$i]; }

ЦитатаСообщение от bleef159 Посмотреть сообщение

$username = array(); $query = mysql_query ("SELECT * FROM `user` WHERE `status` = 'active' "); while ($user=mysql_fetch_assoc($query)) { $username[] = $user['username']; } for($i=0;$i  count($username);$i++) { echo $i.' '.$username[$i]; }

Здравствуй производительность, если такой подход применять для всего проекта! Это называется, я извиняюсь, говнокод!

JaySky нашел верное решение, вот только нет смысла определять переменную, если она используется один раз, да и интерпретатору быстрее обработать конкатенацию строк, чем разбор строки с подменой переменных.
Мой вариант:

$i = 1; $query = mysql_query ("SELECT * FROM `user` WHERE `status` = 'active' "); while ($user=mysql_fetch_assoc($query)) echo ($i++).' '.$user['username'];

Как круто! Получаем данные и тут же их выводим! А потом еще что-нибудь получаем и потом выводим! В итоге получается черт те что. Больше слоёв богу слоёв.

Используйте два цикла, как написал bleef159 — один для получения и обработки данных, другой для вывода.

Перед каждым символом поставить порядковый номер в тексте
Перед каждым символом поставить порядковый номер в тексте. Если строка начинается с цифры, то перед.

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

Изменить все элементы файла, порядковый номер которых кратен 3
Имеется типизированный файл с числами. Изменить все его элементы, порядковый номер которых кратен.

Источник

Читайте также:  There is no default constructor available in java
Оцените статью