Обмен значениями массива с помощью php - программирование

Обмен значениями массива с помощью php

У меня есть массив:

array(
    0 => 'contact',
    1 => 'home',
    2 => 'projects'
);

и мне нужно поменять "контакт" на "home", поэтому массив будет выглядеть так:

array(
    0 => 'home',
    1 => 'contact',
    2 => 'projects'
);

как я могу это сделать с PHP?:)

4b9b3361

Ответ 1

Попробуйте следующее:

$a = array(
    0 => 'contact',
    1 => 'home',
    2 => 'projects'
);
$temp = $a[0];
$a[0] = $a[1];
$a[1] = $temp;

Ответ 2

Я написал простую функцию array_swap: поменяйте местами два элемента между позициями swap_a и swap_b.

function array_swap(&$array,$swap_a,$swap_b){
   list($array[$swap_a],$array[$swap_b]) = array($array[$swap_b],$array[$swap_a]);
}

Для вопроса ОП (например):

$items = array(
  0 => 'contact',
  1 => 'home',
  2 => 'projects'
);

array_swap($items,0,1);
var_dump($items);
// OUTPUT

array(3) {
   [0]=> string(4) "home"
   [1]=> string(7) "contact"
   [2]=> string(8) "projects"
 }

Обновление Начиная с PHP 7.1 это можно сделать так:

$items = [
  0 => 'contact',
  1 => 'home',
  2 => 'projects'
];

[$items[0], $items[1]] = [$items[1], $items[0]];

var_dump($items);
// OUTPUT

array(3) {
   [0]=> string(4) "home"
   [1]=> string(7) "contact"
   [2]=> string(8) "projects"
 }

Это возможно благодаря деструктуризации симметричного массива.

Ответ 3

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

$a = array(
    0 => 'contact',
    1 => 'home',
    2 => 'projects'
);

print_r($a);
Array ( [0] => contact [1] => home [2] => projects )

$tmp = $a[0];
$a[0] = $a[1];
$a[1] = $tmp;

print_r($a);
Array ( [0] => home [1] => contact [2] => projects )

Ответ 4

В PHP 7. 1+ синтаксис, вы можете использовать это

[$Array[$a], $Array[$b]] = [$Array[$b], $Array[$a]];

Ответ 5

$array = array(
    0 => 'home',
    1 => 'contact',
    2 => 'projects'
);

$t = $array[0];
$array[0] = $array[1];
$array[1] = $t;

будет достаточно простым подходом...

Ответ 6

Просто используйте переменную temp для ее хранения. Так:

$temp = $array[0];
$array[0] = $array[1];
$array[1] = $temp;

Таким образом, вы не потеряете ценность одного из них.

Ответ 7

$x = array('a', 'b', 'c', 'd');
array_splice($x, 1, 2, array_reverse(array_slice($x, 1, 2)));
var_dump($x);

array_splice может заменить обратный array_slice

Ответ 8

Если вы хотите избежать использования временного хранилища данных или любите использовать однострочный трафик array_replace().

array_replace() будет производить корректировки в соответствии с индексами:

Код: (Демо)

$a = array(
    0 => 'contact',
    1 => 'home',
    2 => 'projects'
);

var_export(array_replace($a,[$a[1],$a[0]]));

Вывод:

array (
  0 => 'home',
  1 => 'contact',
  2 => 'projects',
)

Ответ 9

Решение:

$a = array(
    0 => 'contact',
    1 => 'home',
    2 => 'projects'
);

list($a[0], $a[1]) = [$a[1], $a[0]];

Я сделал функцию для этого

function swap(&$a, &$b){
    list($a, $b) = [$b, $a];
}

Использование:

swap($a[0], $a[1]);

Ответ 10

Я проверил 4 способа, предложенных для сравнения производительности:

$array=range(0,9999); //First 10000 natural numbers
$time=-microtime(true); //Start time
for($i=0;$i<1000000;++$i){ //1 Millon swaps
    $a=array_rand($array); //Random position: ~60ms
    $b=array_rand($array); //Random position: ~60ms
    //Using a temp variable: ~70ms
    $temp=$array[0];$array[0]=$array[1];$array[1]=$temp;
    //Using list language construct: ~ 140ms
    list($array[$a],$array[$b])=array($array[$b],$array[$a]);
    //Using PHP 7.1+ syntax: ~ 140ms
    [$array[$a],$array[$b]]=[$array[$b],$array[$a]];
    //Using array_replace function: ~ 28000ms
    array_replace($array,[$array[$a],$array[$b]]);
}
$time+=microtime(true); //Elapsed time
echo "Time: ",sprintf('%f', $time)," seconds";

Хотя это, вероятно, не самый удобный способ, использование временной переменной кажется в 2 раза быстрее, чем следующие 2 метода, и в 400 раз быстрее, чем использование функции array_replace.

Ответ 11

Если вы не хотите использовать другую переменную:

    $array[0] = $array[0] + $array[1];
    $array[1] = $array[0] - $array[1];
    $array[0] = $array[0] - $array[1];