Назначить значение из одного ассоциативного массива php в другой массив - PullRequest
1 голос
/ 31 марта 2009

У меня есть переменная $params, которая получает данные из базы данных:

$params = mssql_fetch_array($result)

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

$tempParams = $params

Кроме того, нужен ли мне один оператор для объявления и присвоения значения $ tempParams или они могут быть разделены?

Еще один вопрос, который я хотел бы задать, - это следующее утверждение верно; В то время как $ tempParams содержит значения;

$params['column1'] = $tempParams['newColumns']

Ответы [ 5 ]

5 голосов
/ 31 марта 2009

Да,

$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' 
1 голос
/ 31 марта 2009

Для массивов, числовых и ассоциативных, оператор = создаст копию переменной. И обе переменные полностью независимы друг от друга. Однако при работе с объектами оператор = создает ссылку на объект, и обе переменные указывают на один и тот же объект.

1 голос
/ 31 марта 2009

Да, оператор = точно скопирует массив.

Вы можете проверить себя:

// 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 без элементов внутри.

1 голос
/ 31 марта 2009

Что касается того, является ли ваш массив ассоциативным, прочитайте документацию по mysql_fetch_array ()

Что касается назначения, вы можете поместить его в один оператор

$tempParams = $params = mysql_fetch_array( $result, MYSQL_ASSOC );

Этот простой тест показывает, что когда вы выполняете такое назначение, обе переменные являются отдельными копиями, а не ссылками.

<code>$a = $b = array( 1, 2, 3 );

$b[1] = 'x';

echo '<pre>';
print_r( $a );
print_r( $b );
echo '
';
0 голосов
/ 31 марта 2009

Да, вы можете, но это может вызвать наложение псевдонимов, если вы имеете дело с объектами (в зависимости от используемой версии PHP).

Почему вы хотите скопировать массив? Разве вы не можете работать с той же исходной переменной ($ params)?

...