Присваивать значение из одного ассоциативного массива php в другой массив

StackOverflow https://stackoverflow.com/questions/702255

Вопрос

У меня есть переменная $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)?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top