Присваивать значение из одного ассоциативного массива php в другой массив
-
22-08-2019 - |
Вопрос
У меня есть переменная $params
который получает данные из базы данных:
$params = mssql_fetch_array($result)
Насколько я знаю, это ассоциативный массив.Мне нужен другой массив $tempParams
чтобы сохранить значение этого массива.Могу ли я назначить его, используя следующую инструкцию:
$tempParams = $params
Кроме того, нужен ли мне один оператор для объявления и присвоения значения $tempParams, или они могут быть разделены?
Еще один вопрос, который я хотел бы задать, заключается в том, что следующее утверждение верно;В то время как $tempParams содержит значения;
$params['column1'] = $tempParams['newColumns']
Решение
ДА,
$tempParams = $params;
Скопирует все значения из $params в $tempParams.
$params['foo'] = 'bar';
echo $tempParams['foo']; //nothing
$tempParams = $params;
echo $tempParams['foo']; //'bar'
$params['foo'] = 'hai';
echo $tempParams['foo']; //still: 'bar'
Другие советы
Что касается того, является ли ваш массив ассоциативным, ознакомьтесь с документацией по mysql_fetch_array() mysql_fetch_array()
Что касается назначения, вы действительно можете поместить его в один оператор
$tempParams = $params = mysql_fetch_array( $result, MYSQL_ASSOC );
Этот простой тест показывает, что когда вы выполняете подобное присваивание, обе переменные являются отдельными копиями, а не ссылками.
$a = $b = array( 1, 2, 3 );
$b[1] = 'x';
echo '<pre>';
print_r( $a );
print_r( $b );
echo '</pre>';
Да, оператор = точно скопирует массив.
Вы можете проверить сами:
// get the $params from DB
print_r ($params); // will output array contents
$tempParams = $params;
print_r ($tempParams); // must be the same as above
В PHP нет такого понятия, как “объявление” переменных, но если вы хотите сказать, что $tempParams - это массив где-то перед назначением, вы можете сделать это следующим образом:
$tempParams = array ();
Это сделает $tempParams массивом без элементов внутри.
Для массивов, числовых и ассоциативных, оператор = создаст копию переменной.И обе переменные полностью независимы друг от друга.Однако при работе с объектами оператор = создает ссылку на объект, и обе переменные указывают на один и тот же объект.
Да, вы можете, но это может привести к некоторому сглаживанию, если вы имеете дело с объектами (в зависимости от того, какую версию PHP вы используете).
Почему вы хотите скопировать массив?Разве вы не можете работать с той же исходной переменной ($ params)?