Php массив поменять местами элементы массива

array_flip

Функция array_flip() возвращает array наоборот, то есть ключи массива array становятся значениями, а значения массива array становятся ключами.

Обратите внимание, что значения массива array должны быть корректными ключами, то есть они должны иметь тип integer или string . Если значение имеет неверный тип, будет выдано предупреждение и данная пара ключ/значение не будет включена в результат.

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

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

Массив переворачиваемых пар ключ/значение.

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

Возвращает перевернутый массив в случае успеха, или NULL в случае ошибки.

Примеры

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

$input = array( «oranges» , «apples» , «pears» );
$flipped = array_flip ( $input );

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

Array ( [oranges] => 0 [apples] => 1 [pears] => 2 )

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

$input = array( «a» => 1 , «b» => 1 , «c» => 2 );
$flipped = array_flip ( $input );

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

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

  • array_values() — Выбирает все значения массива
  • array_keys() — Возвращает все или некоторое подмножество ключей массива
  • array_reverse() — Возвращает массив с элементами в обратном порядке

Источник

Поменять местами 2 элемента массива (PHP)

Поменять значения двух элементов массива местами можно двумя способами.

Языковая конструкция list()

В первом способе применяется языковая конструкция list() и определение массива array() из двух значений.

Пример

Например есть массив из 5 элементов, необходимо поменять значения нулевого и четвертого элементов массива.

‘Клавиатура’, 1 => ‘Монитор’, 2 => ‘Мышь’, 3 => ‘Модем’, 4 => ‘Системный блок’ ); // вывод исходного массива print_r($array); // Меняем местами нулевое и четвертое значения массива list($array[0], $array[4]) = array($array[4], $array[0]); // вывод измененного массива print_r($array);

Результат

Array ( [0] => Клавиатура [1] => Монитор [2] => Мышь [3] => Модем [4] => Системный блок ) Array ( [0] => Системный блок [1] => Монитор [2] => Мышь [3] => Модем [4] => Клавиатура )

Промежуточная переменная

В этом способе понадобится промежуточная переменная (буфер).

Способ менее изящен, нежели первый вариант, зато немного быстрее.

Пример

Определим такой же массив как из первого примера, только на этот раз поменяем значения первого и третьего элементов массива.

‘Клавиатура’, 1 => ‘Монитор’, 2 => ‘Мышь’, 3 => ‘Модем’, 4 => ‘Системный блок’ ); // вывод исходного массива print_r($array); // Меняем местами первое и третье значения массива $buf = $array[1]; $array[1] = $array[3]; $array[3] = $buf; // вывод измененного массива print_r($array);

Результат

Array ( [0] => Клавиатура [1] => Монитор [2] => Мышь [3] => Модем [4] => Системный блок ) Array ( [0] => Клавиатура [1] => Модем [2] => Мышь [3] => Монитор [4] => Системный блок )

Функция array_swap()

Удобнее описать один раз функцию array_swap(array &$array, $key, $key2) .

Читайте также:  Основные типы переменных питон

Пример

Задача поменять местами первое и четвертое значение массива.

‘Клавиатура’, 1 => ‘Монитор’, 2 => ‘Мышь’, 3 => ‘Модем’, 4 => ‘Системный блок’ ); // вывод исходного массива print_r($array); // Меняем местами первое и четвертое значения массива array_swap($array, 1, 4); // вывод измененного массива print_r($array);

Результат

Array ( [0] => Клавиатура [1] => Монитор [2] => Мышь [3] => Модем [4] => Системный блок ) Array ( [0] => Клавиатура [1] => Системный блок [2] => Мышь [3] => Модем [4] => Монитор )

Заключение

Небольшой эксперимент по скорости выполнения показал, что второй способ работает чуть быстрее, примерно в 1.2 раза.

Категории

Читайте также

  • Получить последнее значение массива (PHP)
  • Массив уникальных значений (JavaScript)
  • Получить первое значение массива (PHP)
  • Найти и удалить элемент массива (PHP)
  • Элементы массива в случайном порядке (PHP)
  • Случайный элемент массива (JavaScript)
  • Ассоциативный массив в JavaScript
  • Преобразовать массив в объект (PHP)
  • Умножить массив на число (PHP)
  • Получить последовательность элементов массива (PHP)
  • Удалить пустые элементы из массива (PHP)
  • Как объединить два массива (PHP)

Комментарии

Вход на сайт

Введите данные указанные при регистрации:

Социальные сети

Вы можете быстро войти через социальные сети:

Источник

Как поменять местами элементы php массива

Также поменять два элемента местами можно следующим способом:

 $a = [1, 2]; [$a[1], $a[0]] = $a; print_r($a); // [ // [0] => 2 // [1] => 1 // ] 

Очень просто! Для этого нужно использовать промежуточную переменную, в которую мы сохраним один из элементов. Ниже пример того как это делается:

 $items = [1, 'two', false]; // Поменяем местами первый и последний элемент // Сохраняем первый элемент в переменную $temp $temp = $items[0]; // Заменяем первый элемент массива последним $items[0] = $items[2]; // А теперь заменяем последний элемент значением из переменной $temp $items[2] = $temp; // Итоговый массив // [ // false, // "two", // 1, // ] 

Источник

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

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. [prefix] k — key sort. Will sort array by keys. [prefix] r — reverse. Will sort array in reverse order. [prefix] u — sort by user defined function (same as for diff/intersect).

Big arrays use a lot of memory possibly resulting in memory limit errors. You can reduce memory usage on your script by destroying them as soon as you´re done with them. I was able to get over a few megabytes of memory by simply destroying some variables I didn´t use anymore.
You can view the memory usage/gain by using the funcion memory_get_usage(). Hope this helps!

Читайте также:  Функция возведения в куб python

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 = 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)

Читайте также:  METANIT.COM

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 ;
>
?>

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 =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 ));
?>

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 ;
>
?>

/*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» ;

Источник

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