#ИМЯ? - программирование

#ИМЯ?

$test = array('hi');
$test += array('test','oh');
var_dump($test);

Что означает + для массива в PHP?

4b9b3361

Ответ 1

Цитата из Руководство по языку оператора PHP

Оператор + возвращает правый массив, присоединенный к левому массиву; для ключей, которые существуют в обоих массивах, будут использоваться элементы из левого массива, а соответствующие элементы из правого массива будут проигнорированы.

Итак, если вы делаете

$array1 = ['one',   'two',          'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz']; 

print_r($array1 + $array2);

Вы получите

Array
(
    [0] => one   // preserved from $array1 (left-hand array)
    [1] => two   // preserved from $array1 (left-hand array)
    [foo] => bar // preserved from $array1 (left-hand array)
    [2] => five  // added from $array2 (right-hand array)
)

Итак, логика + эквивалентна следующему фрагменту:

$union = $array1;

foreach ($array2 as $key => $value) {
    if (false === array_key_exists($key, $union)) {
        $union[$key] = $value;
    }
}

Если вы заинтересованы в деталях главы внедрения уровня C на


Обратите внимание, что + отличается от array_merge() объединять массивы:

print_r(array_merge($array1, $array2));

даст вам

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => baz // overwritten from $array2
    [2] => three // appended from $array2
    [3] => four  // appended from $array2
    [4] => five  // appended from $array2
)

Более подробную информацию см. на связанных страницах.

Ответ 2

Лучший пример, который я нашел для этого, - в массиве config.

$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"[email protected]");

$config = $user_vars + $default_vars;

$default_vars, как он предполагает, является массивом значений по умолчанию. Массив $user_vars перезапишет значения, определенные в $default_vars. Любые отсутствующие значения в $user_vars теперь являются значениями по умолчанию от $default_vars.

Это было бы print_r как:

Array(2){
    "username" => "John Doe",
    "email" => "[email protected]"
}

Надеюсь, это поможет!

Ответ 3

Этот оператор принимает объединение двух массивов (таких же, как array_merge, за исключением того, что с дублирующимися ключами array_merge перезаписываются).

Документация для операторов массива найдена здесь.

Ответ 4

Обратите внимание на числовые клавиши, если они должны быть сохранены или если вы не хотите ничего потерять

$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");

объединение

print_r($a+$b);
Array
(
    [2] => a2
    [4] => a4
    [5] => a5
    [1] => b1
    [3] => b3
)

Объединить

print_r(array_merge($a, $b));
Array
(
    [0] => a2
    [1] => a4
    [2] => a5
    [3] => b1
    [4] => b3
    [5] => b4
)

Ответ 5

Оператор + дает те же результаты, что и array_replace(). Однако, поскольку аргументы оператора меняются на противоположные, упорядочение результирующего массива также может быть различным.

Развернувшись на другом примере с этой страницы:

$array1 = array('one', 'two', 'foo' => 'bar');
$array2 = array('three', 'four', 'five', 'foo' => 'baz'); 

print_r($array1 + $array2);
print_r(array_replace($array2, $array1)); //note reversed argument order

выходы:

Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [foo] => bar // preserved from $array1
    [2] => five  // added from $array2
)
Array
(
    [0] => one   // preserved from $array1
    [1] => two   // preserved from $array1
    [2] => five  // added from $array2
    [foo] => bar // preserved from $array1
)

Ответ 6

  • Операция Array plus обрабатывает весь массив в качестве массива-члена.
  • Когда ключевой конфликт во время плюс, останется левое (предыдущее) значение.

Опубликуйте приведенный ниже код, чтобы все было ясно.

$a + $b = array_plus($a, $b)

function array_plus($a, $b){
    $results = array();
    foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    return $results;
}

Ответ 7

Он добавит новый массив к предыдущему.

Ответ 8

$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);

Массив ([0] = > пример [1] = > тест)