Php вывести первые два элемента массива

Задачи на основы работы с массивами в PHP

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор
Читайте также:  Как отмыть матрас от пятен ванишем

Перед решением задач изучите теорию к данному уроку.

Примеры решения задач

Задача

Задача. Дан массив с элементами ‘Привет, ‘, ‘мир’ и ‘!’. Необходимо вывести на экран фразу ‘Привет, мир!’.

Разберем это решение.

Слово ‘Привет, ‘ хранится под номером 0, это значит, что для доступа к нему мы должны написать $arr[0].

Для доступа к слову ‘мир’ мы должны написать $arr[1], а $arr[2] содержит в себе ‘!’. Далее с помощью оператора ‘точка’ мы сложим три наши строки (‘Привет, ‘, ‘мир’ и ‘!’) в одну строку таким образом: $arr[0].$arr[1].$arr[2], и выведем на экран с помощью echo.

Задача

Задача. Решим немного другую задачу: дан массив с элементами ‘Привет, ‘, ‘мир’ и ‘!’. Необходимо записать в переменную $text фразу ‘Привет, мир!’, а затем вывести на экран содержимое этой переменной.

Задача

Задача. Дан массив [‘Привет, ‘, ‘мир’, ‘!’]. Необходимо записать в первый элемент (то есть элемент с номером ноль) этого массива слово ‘Пока, ‘ (то есть вместо слова ‘Привет, ‘ будет ‘Пока, ‘).

Задача . Ассоциативные массивы

Задача. Создайте массив заработных плат $arr. Выведите на экран зарплату Пети и Коли.

Решение: чтобы вывести зарплату Коли следует вывести значение элемента массива с ключом ‘Коля’. Сделаем это:

Задача . Способы создания массива

Задача. Создайте массив $arr с элементами 1, 2, 3, 4, 5 двумя различными способами.

Первый способ создать массив — объявить его через []:

Второй способ создания массива — это поступить таким образом:

Задача . Многомерный массив

Задача. Дан многомерный массив $arr:

Выведите с его помощью слово ‘голубой’.

Решение: так как массив многомерный (в нашем случае двухмерный), то нам придется написать несколько квадратных скобок подряд. Поясню это по шагам. Давайте сделаем так:

В этом случае результатом будет массив [‘голубой’,’красный’, ‘зеленый’], который является частью нашего многомерного массива. Чтобы вывести слово ‘голубой’, на необходимо дописать еще одну квадратную скобку с ключом, соответствующим этому элементу (у него нет явного ключа — значит его ключ 0):

Выведем теперь слово ‘красный’:

Задачи для решения

Работа с массивами

Создайте массив $arr=[‘a’, ‘b’, ‘c’]. Выведите значение массива на экран с помощью функции var_dump().

С помощью массива $arr из предыдущего номера выведите на экран содержимое первого, второго и третьего элементов.

Создайте массив $arr=[‘a’, ‘b’, ‘c’, ‘d’] и с его помощью выведите на экран строку ‘a+b, c+d’.

Создайте массив $arr с элементами 2, 5, 3, 9. Умножьте первый элемент массива на второй, а третий элемент на четвертый. Результаты сложите, присвойте переменной $result. Выведите на экран значение этой переменной.

Заполните массив $arr числами от 1 до 5. Не объявляйте массив, а просто заполните его присваиванием $arr[] = новое значение.

Ассоциативные массивы

Создайте массив $arr. Выведите на экран элемент с ключом ‘c’.

Создайте массив $arr. Найдите сумму элементов этого массива.

Создайте массив заработных плат $arr. Выведите на экран зарплату Пети и Коли.

Создайте ассоциативный массив дней недели. Ключами в нем должны служить номера дней от начала недели (понедельник — должен иметь ключ 1, вторник — 2 и т.д.). Выведите на экран текущий день недели.

Пусть теперь номер дня недели хранится в переменной $day, например там лежит число 3. Выведите день недели, соответствующий значению переменной $day.

Многомерные массивы

Создайте многомерный массив $arr. С его помощью выведите на экран слова ‘joomla’, ‘drupal’, ‘зеленый’, ‘красный’.

Создайте двухмерный массив. Первые два ключа — это ‘ru’ и ‘en’. Пусть первый ключ содержит элемент, являющийся массивом названий дней недели по-русски, а второй — по-английски. Выведите с помощью этого массива понедельник по-русски и среду по английски (пусть понедельник — это первый день).

Пусть теперь в переменной $lang хранится язык (она принимает одно из значений или ‘ru’, или ‘en’ — либо то, либо то), а в переменной $day — номер дня. Выведите словом день недели, соответствующий переменным $lang и $day. То есть: если, к примеру, $lang = ‘ru’ и $day = 3 — то выведем ‘среда’.

Источник

Функции для работы с массивами

Содержание

User Contributed Notes 14 notes

A simple trick that can help you to guess what diff/intersect or sort function does by name.

[suffix] assoc — additional index check. Compares both value and index.

Example: array_diff_assoc, array_intersect_assoc.

[suffix] key — index only check. Ignores value of array, compares only indexes.

Example: array_diff_key, array_intersect_key.

[suffix] **empty** — no «key» or «assoc» word in suffix. Compares values only. Ignores indexes of array.

Example: array_diff, array_intersect.

[prefix] u — will do comparison with user defined function. Letter u can be used twice in some functions (like array_udiff_uassoc), this means that you have to use 2 functions (one for value, one for index).

Example: array_udiff_uassoc, array_uintersect_assoc.

This also works with array sort functions:

[prefix] a — associative. Will preserve keys.

Example: arsort, asort.

[prefix] k — key sort. Will sort array by keys.

Example: uksort, ksort.

[prefix] r — reverse. Will sort array in reverse order.

Example: rsort, krsort.

[prefix] u — sort by user defined function (same as for diff/intersect).

Example: usort, uasort.

I need to take an element from the Array and change its position within the Array by moving the rest of the elements as required.
This is the function that does it. The first parameter is the working Array. The second is the position of the element to move and the third is the position where to move the element.
The function returns the modified Array.
function array_move_elem ( $array , $from , $to ) <
if ( $from == $to ) < return $array ; >
$c = count ( $array );
if (( $c > $from ) and ( $c > $to )) <
if ( $from $to ) <
$f = $array [ $from ];
for ( $i = $from ; $i $to ; $i ++) <
$array [ $i ] = $array [ $i + 1 ];
>
$array [ $to ] = $f ;
> else <
$f = $array [ $from ];
for ( $i = $from ; $i > $to ; $i —) <
$array [ $i ] = $array [ $i — 1 ];
>
$array [ $to ] = $f ;
>

?>
Examples:
= array( ‘Cero’ , ‘Uno’ , ‘Dos’ , ‘Tres’ , ‘Cuatro’ , ‘Cinco’ , ‘Seis’ , ‘Siete’ , ‘Ocho’ , ‘Nueve’ , ‘Diez’ );
$array = array_move_elem ( $array , 3 , 5 ); // Move element in position 3 to position 5.
print_r ( $array );

$array = array_move_elem ( $array , 5 , 3 ); // Move element in position 5 to position 3, leaving array as it was. 😉
print_r ( $array );

?>
Return:
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Cuatro [ 4 ] => Cinco [ 5 ] => Tres [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Tres [ 4 ] => Cuatro [ 5 ] => Cinco [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
?>

Updated code of ‘indioeuropeo’ with option to input string-based keys.

FUNCTION:
function array_move_elem ( $array , $from , $to ) <
// return if non-numeric couldn’t be found or from=to
if(! is_numeric ( $from )) <
if( array_search ( $from , array_keys ( $array ))!== FALSE ) <
$from = array_search ( $from , array_keys ( $array ));
>else <
return $array ;
>
>
$array_numeric_keys = array();
foreach( $array as $k => $v ) <
$array_numeric_keys [] = $k ;
>
if ( $from == $to ) < return $array ; >
$c = count ( $array_numeric_keys );
if (( $c > $from ) and ( $c > $to )) <
if ( $from $to ) <
$f = $array_numeric_keys [ $from ];
for ( $i = $from ; $i $to ; $i ++) <
$array_numeric_keys [ $i ] = $array_numeric_keys [ $i + 1 ];
>
$array_numeric_keys [ $to ] = $f ;
> else <
$f = $array_numeric_keys [ $from ];
for ( $i = $from ; $i > $to ; $i —) <
$array_numeric_keys [ $i ] = $array_numeric_keys [ $i — 1 ];
>
$array_numeric_keys [ $to ] = $f ;
>

>
$array_new = array();
foreach( $array_numeric_keys as $v ) <
$array_new [ $v ] = $array [ $v ];
>
return $array_new ;
>
?>

Here is a function to find out the maximum depth of a multidimensional array.

// return depth of given array
// if Array is a string ArrayDepth() will return 0
// usage: int ArrayDepth(array Array)

function ArrayDepth ( $Array , $DepthCount =- 1 , $DepthArray =array()) <
$DepthCount ++;
if ( is_array ( $Array ))
foreach ( $Array as $Key => $Value )
$DepthArray []= ArrayDepth ( $Value , $DepthCount );
else
return $DepthCount ;
foreach( $DepthArray as $Value )
$Depth = $Value > $Depth ? $Value : $Depth ;
return $Depth ;
>
?>

Short function for making a recursive array copy while cloning objects on the way.

function arrayCopy ( array $array ) <
$result = array();
foreach( $array as $key => $val ) <
if( is_array ( $val ) ) <
$result [ $key ] = arrayCopy ( $val );
> elseif ( is_object ( $val ) ) <
$result [ $key ] = clone $val ;
> else <
$result [ $key ] = $val ;
>
>
return $result ;
>
?>

If you need to flattern two-dismensional array with single values assoc subarrays, you could use this function:

function arrayFlatten ( $array ) <
$flattern = array();
foreach ( $array as $key => $value ) <
$new_key = array_keys ( $value );
$flattern [] = $value [ $new_key [ 0 ]];
>
return $flattern ;
>
?>

to 2g4wx3:
i think better way for this is using JSON, if you have such module in your PHP. See json.org.

to convert JS array to JSON string: arr.toJSONString();
to convert JSON string to PHP array: json_decode($jsonString);

You can also stringify objects, numbers, etc.

Function to pretty print arrays and objects. Detects object recursion and allows setting a maximum depth. Based on arraytostring and u_print_r from the print_r function notes. Should be called like so:

( $value ) //no max depth, or
egvaluetostring ( $value , $max_depth ) //max depth set

function egvaluetostring ( $value , $max_depth , $key = NULL , $depth = 0 , $refChain = array()) <
if( $depth > 0 )
$tab = str_repeat ( «\t» , $depth );
$text .= $tab . ( $key !== NULL ? $key . » => » : «» );

if ( is_array ( $value ) || is_object ( $value )) <
$recursion = FALSE ;
if ( is_object ( $value )) <
foreach ( $refChain as $refVal ) <
if ( $refVal === $value ) <
$recursion = TRUE ;
break;
>
>
array_push ( $refChain , $value );
>

$text .= ( is_array ( $value ) ? «array» : «object» ) . » ( » ;

if ( $recursion ) <
$text .= «*RECURSION* » ;
>
elseif (isset( $max_depth ) && $depth >= $max_depth ) <
$text .= «*MAX DEPTH REACHED* » ;
>
else <
if (!empty( $value )) <
$text .= «\n» ;
foreach ( $value as $child_key => $child_value ) <
$text .= egvaluetostring ( $child_value , $max_depth , ( is_array ( $value ) ? «[» : «» ) . $child_key . ( is_array ( $value ) ? «]» : «» ), $depth + 1 , $refChain ) . «,\n» ;
>
$text .= «\n» . $tab ;
>
>

if ( is_object ( $value )) <
array_pop ( $refChain );
>
>
else <
$text .= » $value » ;
>

I was looking for an array aggregation function here and ended up writing this one.

Note: This implementation assumes that none of the fields you’re aggregating on contain The ‘@’ symbol.

function array_group_by ( $flds , $arr ) <
$groups = array();
foreach ( $arr as $rec ) <
$keys = array_map (function( $f ) use( $rec ) < return $rec [ $f ]; >, $flds );
$k = implode ( ‘@’ , $keys );
if (isset( $groups [ $k ])) <
$groups [ $k ][] = $rec ;
> else <
$groups [ $k ] = array( $rec );
>
>
return $groups ;
>

While PHP has well over three-score array functions, array_rotate is strangely missing as of PHP 5.3. Searching online offered several solutions, but the ones I found have defects such as inefficiently looping through the array or ignoring keys.

The following array_rotate() function uses array_merge and array_shift to reliably rotate an array forwards or backwards, preserving keys. If you know you can trust your $array to be an array and $shift to be between 0 and the length of your array, you can skip the function definition and use just the return expression in your code.

function array_rotate ( $array , $shift ) <
if(! is_array ( $array ) || ! is_numeric ( $shift )) <
if(! is_array ( $array )) error_log ( __FUNCTION__ . ‘ expects first argument to be array; ‘ . gettype ( $array ). ‘ received.’ );
if(! is_numeric ( $shift )) error_log ( __FUNCTION__ . ‘ expects second argument to be numeric; ‘ . gettype ( $shift ). » ` $shift ` received.» );
return $array ;
>
$shift %= count ( $array ); //we won’t try to shift more than one array length
if( $shift 0 ) $shift += count ( $array ); //handle negative shifts as positive
return array_merge ( array_slice ( $array , $shift , NULL , true ), array_slice ( $array , 0 , $shift , true ));
>
?>
A few simple tests:
=array( «foo» => 1 , «bar» => 2 , «baz» => 3 , 4 , 5 );

print_r ( array_rotate ( $array , 2 ));
print_r ( array_rotate ( $array , — 2 ));
print_r ( array_rotate ( $array , count ( $array )));
print_r ( array_rotate ( $array , «4» ));
print_r ( array_rotate ( $array , — 9 ));
?>

/*to change an index without rewriting the whole table and leave at the same place.
*/
function change_index (& $tableau , $old_key , $new_key ) <
$changed = FALSE ;
$temp = 0 ;
foreach ( $tableau as $key => $value ) <
switch ( $changed ) <
case FALSE :
//creates the new key and deletes the old
if ( $key == $old_key ) <
$tableau [ $new_key ] = $tableau [ $old_key ];
unset( $tableau [ $old_key ]);
$changed = TRUE ;
>
break;

case TRUE :
//moves following keys
if ( $key != $new_key ) <
$temp = $tableau [ $key ];
unset( $tableau [ $key ]);
$tableau [ $key ] = $temp ;
break;
>
else < $changed = FALSE ;>//stop
>
>
array_values ( $tableau ); //free_memory
>

//Result :
$tableau = array( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 );
$res = print_r ( $tableau , TRUE );
$longueur = strlen ( $res ) — 1 ;
echo «Old array :\n» . substr ( $res , 8 , $longueur ) . «\n» ;

change_index ( $tableau , 2 , ‘number 2’ );
$res = print_r ( $tableau , TRUE );
$longueur = strlen ( $res ) — 10 ;
echo «New array :\n» . substr ( $res , 8 , $longueur ) . «\n» ;

Источник

Оцените статью