#php #arrays #variables #variable-variables #array-merge
#php #массивы #переменные #переменная-переменные #массив-слияние
Вопрос:
У меня есть куча массивов, которые хранятся в разных переменных, таких как $ required, $ reserved и т.д…
Я хотел бы разрешить (внутри функции) передавать массив параметров (например $options = array('required', 'reserved')
), и этот массив затем использовался бы для определения, какие массивы объединять вместе и возвращать в конце функции.
Итак, у меня есть этот код в части функции, которая должна захватить все параметры и объединить массивы, используя переменные переменные для получения массивов из строк, переданных в массиве опций):
$array = array();
foreach ($options as $key) {
$array_to_merge = ${$key};
array_merge($array, $array_to_merge);
}
return $array;
Однако, когда я возвращаю $array, он показывает 0 элементов. Если я print_r($array_to_merge);
, я действительно получу весь массив, как и должен.
Array_merge () просто не работает с переменными переменными, или я что-то здесь упускаю …?
Комментарии:
1. Вы пробовали
array_push()
вместо этого? Я использовал это и добился большого успеха с этим.2. Переменных Лучше избегать в скриптах, потому что они могут создать сложную для отладки путаницу. Если что-то подобное связано, обычно лучше определять их как массив с их именами в качестве индексов.
Ответ №1:
array_merge возвращает объединенный массив, вы ничему не присваиваете это возвращаемое значение и, следовательно, оно теряется.
$array = array_merge($array, $array_to_merge);
должно решить вашу проблему.
Комментарии:
1. Это отвечает на вопрос, который у меня был, хотя мне также очень нравится ответ Марио ниже … спасибо за помощь от вас обоих!
Ответ №2:
Если я правильно прочитал, вы также можете упростить свой код (заменить цикл), просто:
$array = call_user_func_array("array_merge", compact($options));
compact
заменяет переменную variable lookup и получает список массивов. И, по сути, требуется только один array_merge
вызов.
Комментарии:
1. Вау, это потрясающе! Никогда раньше не использовал / не видел compact (), и он делает почти именно то, что мне нужно … к сожалению, у меня здесь многомерный массив, поэтому я не знаю, подходит ли compact в данном случае.