我想在foreach
循环中更改对象的一些属性:
foreach ($object->array as $element) {
$element['foo'] = $new_foo;
$element['bar'] = $new_bar;
}
我应该如何使用函数来做到这一点?否则我怎么能用面向对象的方法做到这一点?我的代码不起作用,因为它只会更改函数中$handle
变量的值:
function change_attribute(&$handle, $new_value) {
$handle = $new_value;
}
foreach ($object->array as $element) {
change_attribute($element['foo'], $new_foo);
change_attribute($element['bar'], $new_bar);
}
实际代码
foreach ($xml->database[0]->table as $table) {
$table->column[1]['name'] = 'new value';
}
它在不引用数组元素的情况下成功更新了$xml
对象(这会导致致命错误)。为什么我不能对这个功能做同样的事情?
function change_attribute(&$handle, $old, $new) {
if ($handle == $old) {
$handle = $new;
}
}
foreach ($xml->database[0]->table as $table) {
change_attribute($table->column[1]['name'], 'old value', 'new value');
}
$xml
对象_
php > var_dump($xml->database[0]->table);
object(SimpleXMLElement)#2 (2) {
["@attributes"]=>
array(1) {
["name"]=>
string(7) "objects"
}
["column"]=>
array(5) {
[0]=>
string(4)
[1]=>
string(1)
[2]=>
string(17)
[3]=>
string(17)
[4]=>
string(1949)
}
}
var_dump($xml->database[0]->table[0])
除了后面的 is 之外,这与 相同object(SimpleXMLElement)#4 (2)
。
object(SimpleXMLElement)#2 (2) {
["@attributes"]=>
array(1) {
["name"]=>
string(9) "old value"
}
[0]=>
string(1) "2"
}