文字

ArrayObject::exchangeArray

(PHP 5 >= 5.1.0)

ArrayObject::exchangeArrayExchange the array for another one.

说明

public array ArrayObject::exchangeArray ( mixed $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.

上一篇: 下一篇: