PHP 日本研討會 2024

ArrayObject::exchangeArray

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

ArrayObject::exchangeArray交換陣列為另一個陣列

說明

public ArrayObject::exchangeArray(array|object $array): array

將目前的 array 與另一個 arrayobject 交換。

參數

array

要與目前陣列交換的新 arrayobject

回傳值

回傳舊的 array

範例

範例 #1 ArrayObject::exchangeArray() 範例

<?php
// 可用水果的陣列
$fruits = array("lemons" => 1, "oranges" => 4, "bananas" => 5, "apples" => 10);
// 歐洲地點的陣列
$locations = array('Amsterdam', 'Paris', 'London');

$fruitsArrayObject = new ArrayObject($fruits);

// 現在將水果換成地點
$old = $fruitsArrayObject->exchangeArray($locations);
var_dump($old);
var_dump($fruitsArrayObject);

?>

上面的範例將輸出

array(4) {
  ["lemons"]=>
  int(1)
  ["oranges"]=>
  int(4)
  ["bananas"]=>
  int(5)
  ["apples"]=>
  int(10)
}
object(ArrayObject)#1 (1) {
  ["storage":"ArrayObject":private]=>
  array(3) {
    [0]=>
    string(9) "Amsterdam"
    [1]=>
    string(5) "Paris"
    [2]=>
    string(6) "London"
  }
}

新增註解

使用者貢獻的註解 1 則註解

4
Corentin Larose
10 年前
值得注意的是,ArrayObject::exchangeArray() 不會在內部針對參數中提供的陣列/物件的每個偏移/屬性呼叫 ArrayObject::offsetSet()。

同樣值得注意的是,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);

// 輸出:
MyArrayObject Object
(
[
storage:ArrayObject:private] => Array
(
[
my_value_1_control] => 3
[my_value_1] => 5
[my_value_2_control] => 2
[my_value_2] => 5
)
)
?>
To Top