Добавление нескольких значений в ассоциативный массив в PHP за один вызов

Я пытаюсь создать экземпляр ассоциативного массива, а затем во втором вызове присвоить ему различные другие наборы значений в одной блочной строке. Я хотел бы сделать это в той же форме, что и в экземпляре:

"variable"  = > 'value';

Мой экземпляр:

$post_values = array(
    "x_login"           => "API_LOGIN_ID",
    "x_tran_key"        => "TRANSACTION_KEY",
);

Я хотел бы добавить:

"x_version"         => "3.1",
"x_delim_data"      => "TRUE",
"x_delim_char"      => "|",
"x_relay_response"  => "FALSE",
"x_state"           => "WA",
"x_zip"             => "98004"

Каковы мои варианты? Возможно, есть использование array_push, о котором я не знаю, чтобы с большей легкостью добавлять несколько значений? Или я застрял, добавляя значение за вызов, например:

$post_values['x_version']='3.1'; 
 ....
$post_values['x_zip']='98004';

Есть ли другой изящный способ добавить несколько значений в ассоциативный массив в одну строку?


person ViviDVasT    schedule 30.10.2011    source источник
comment
см. соответствующий ответ [в одном вызове] здесь :: @the bottom;; stackoverflow.com/questions/6123122/   -  person ek-    schedule 21.11.2013


Ответы (4)


Попробуй это:

$post_values = array( 
    "x_login"           => "API_LOGIN_ID", 
    "x_tran_key"        => "TRANSACTION_KEY", 
); 

$array2 = array(
    "x_version"         => "3.1",  
    "x_delim_data"      => "TRUE",  
    "x_delim_char"      => "|",  
    "x_relay_response"  => "FALSE",  
    "x_state"           => "WA",  
    "x_zip"             => "98004"  
);

$result = $post_values + $array2;

Однако предостережение: если ключ уже существует в $post_values, он не будет перезаписан.

person Deleted    schedule 30.10.2011
comment
Кажется, array_merge перезаписывает, где + — та же функция, но не перезаписывает. Понял, спасибо :) - person ViviDVasT; 30.10.2011
comment
Вы также можете использовать оператор += вот так $post_values += ['x_version' => '3.1', 'x_zip' => 98004]; - person Baptiste Costa; 26.05.2015

Чтобы все было красиво и чисто, а в данном случае просто, вам может быть лучше использовать массив_слияния()

Я лично объявляю любые массивы в верхней части моего файла класса, чтобы сделать их глобально доступными, только потому, что я склонен держать методы свободными от объявления массива (я думаю, OCD!)

Итак, для меня у меня есть пример, который может вам помочь, это то, что работает для меня, когда нужно добавить/объединить два массива вместе:

protected $array1 = array (
  'basic'   => '1',
  'example' => '2',
  'for'     => '3'  
);

protected $array2 = array(
  'merging'     => '4',
  'two'         => '5',
  'associative' => '6',
  'arrays'      => '7',
  'mate'        => '8'
);

Затем в вашем файле класса вы можете использовать эти массивы или любые созданные массивы и объединять их, когда захотите:

public function ExampleOne() 
{
  $firstArray = $this->array1;
  print_r($firstArray);

  $secondArray = $this->array2;
  print_r($secondArray);

  $merged = array_merge($firstArray, $secondArray);
  print_r($merged);
}

Каждая функция print_r() выводит в консоли данные/созданного массива. Это делается для того, чтобы вы могли сами убедиться, что все было создано правильно и каждый ключ имеет свое значение (см. справочные страницы PHP для окончательного объяснения print_r()).

Итак, первый массив будет/должен демонстрировать это:

Array
(
  [basic]   => 1
  [example] => 2
  [for]     => 3
)

Второй массив будет/должен отображать это:

Array
(
  [merging]     => 4
  [two]         => 5
  [associative] => 6
  [arrays]      => 7
  [mate]        => 8
)

И операция array_merge() создаст окончательный массив, который будет/должен демонстрировать это:

Array
(
  [basic]       => 1
  [example]     => 2
  [for]         => 3
  [merging]     => 4
  [two]         => 5
  [associative] => 6
  [arrays]      => 7
  [mate]        => 8
)

Конечно, вам не всегда нужно размещать/создавать свои массивы в верхней части файла класса, и при необходимости вы, очевидно, можете создавать массивы внутри одной функции, если они нужны/используются только там – то, что я продемонстрировал здесь, было просто что-то, что я недавно сделал для проекта на работе (конечно, данные в этих массивах являются примерными данными!)

Надеюсь, это поможет людям немного больше :-D

person Vin Chenzo    schedule 21.08.2015

array_push() примет массив для отправки.
Но array_merge() может быть больше, чем вы хотите.

person John Watson    schedule 30.10.2011

Вы можете попробовать использовать следующую функцию: array_merge

person Benjamin Brizzi    schedule 30.10.2011