©
本文档使用
php.cn手册 发布
(PHP 5 >= 5.1.0)
ArrayObject::exchangeArray — Exchange the array for another one.
$input
)Exchange the current array with another array or object .
input
The new array or object to exchange with the current array.
Returns the old array .
Example #1 ArrayObject::exchangeArray() example
<?php
// Array of available fruits
$fruits = array( "lemons" => 1 , "oranges" => 4 , "bananas" => 5 , "apples" => 10 );
// Array of locations in Europe
$locations = array( 'Amsterdam' , 'Paris' , 'London' );
$fruitsArrayObject = new ArrayObject ( $fruits );
// Now exchange fruits for locations
$old = $fruitsArrayObject -> exchangeArray ( $locations );
print_r ( $old );
print_r ( $fruitsArrayObject );
?>
以上例程会输出:
Array ( [lemons] => 1 [oranges] => 4 [bananas] => 5 [apples] => 10 ) ArrayObject Object ( [0] => Amsterdam [1] => Paris [2] => London )
[#1] Corentin Larose [2014-05-09 14:59:13]
It's worth notting that ArrayObject::exchangeArray() doesn't call ArrayObject::offsetSet() internally for each offset/property of the array/object provided in argument.
It's also worth noting the let's say "unexpected" behavior of get/set:
<?php
class MyArrayObject extends ArrayObject
{
public function offsetSet($name, $value)
{
parent::offsetSet($name . '_control', $value);
parent::offsetSet($name, $value);
}
}
$test = new MyArrayObject();
$test->setFlags(\ArrayObject::ARRAY_AS_PROPS);
$test['my_value_1'] = 1;
$test['my_value_1'] = $test['my_value_1'] + 1;
$test['my_value_1'] += 1;
$test['my_value_1'] ++;
++ $test['my_value_1'];
$test->my_value_2 = 1;
$test->my_value_2 = $test->my_value_2 + 1;
$test->my_value_2 += 1;
$test->my_value_2 ++;
++ $test->my_value_2;
print_r($test);
// Prints out:
MyArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[my_value_1_control] => 3
[my_value_1] => 5
[my_value_2_control] => 2
[my_value_2] => 5
)
)
?>
[#2] Dmitri Snytkine [2009-12-15 14:11:24]
It seems that input array is always passed by reference.
For example if you have an existing array
$array with some values
then you have an arrayobject $o
and then you do this:
$o->exchangeArray($array);
$o->offsetSet('somekey', 'some value');
Now if you check your $array array, it will have
a key 'somekey' with value of 'some value'
I totally did not expect that, I am sure it was a mistake to pass array by reference by default.