在PHP中,如何更新关联数组中的值并存储整个数组?
下面是一个代码示例:在PHP中,如何更新关联数组中的值并存储整个数组?,php,Php,下面是一个代码示例: $array = array(); $array['master']['slave'] = "foo"; foreach ($array as $key => $value) { foreach ($value as $key2 => $value2) { if (preg_match('/slave/',$key2)) { $value[$key2] = "bar"; print "$v
$array = array();
$array['master']['slave'] = "foo";
foreach ($array as $key => $value) {
foreach ($value as $key2 => $value2) {
if (preg_match('/slave/',$key2)) {
$value[$key2] = "bar";
print "$value[$key2] => $key2 => $value2\n";
}
}
}
print_r($array);
输出:
bar => slave => foo
Array
(
[master] => Array
(
[slave] => foo
)
)
相反,我希望将以下内容作为最终数组:
Array
(
[master] => Array
(
[slave] => bar
)
)
我怎么会在这里
谢谢大家!
注意:
示例2:
$a= array('l1'=>array('l2'=>array('l3'=>array('l4'=>array('l5'=>'foo')))));
$a['l1']['l2']['l3']['l4']['l5'] = 'bar';
foreach ($a as $i => &$values) {
foreach ( $values as $key => &$value) {
if (is_array($value)){
print_array($value,$key);
}
}
}
function print_array ($Array, $parent) {
foreach ($Array as $i1 => &$values1) {
if (is_array($values1)){
foreach ($values1 as $key1 => &$value1) {
if (is_array($value1)) {
print_array($value1,$values1);
}
else {
print " $key1 => $value1\n";
}
}
}
else {
if (preg_match('/l5/',$i1)) {
$values1 = "foobar";
print " $i1 => $values1\n";
}
}
}
}
print_r($a);
输出不反映l5中的“foobar”为什么不只是:
foreach ($array as $key => &$value)
{
if(isset($value['slave']))
$value['slave'] = 'bar';
};
因为
foreach
对数组的副本进行操作。阅读有关以下内容的文档:
注意:除非数组是引用的,foreach
对指定数组的副本而不是数组本身进行操作foreach
对数组指针有一些副作用。在foreach
期间或之后,如果不重置数组指针,请不要依赖它
所以你应该这么做
foreach ($array as $key => &$value) {
foreach ($value as $key2 => $value2) {
//...
}
}
更新:
$a= array('l1'=>array('l2'=>array('l3'=>array('l4'=>array('l5'=>'foo')))));
$a['l1']['l2']['l3']['l4']['l5'] = 'bar';
foreach ($a as $i => &$values) {
foreach ( $values as $key => &$value) {
if (is_array($value)){
print_array($value,$key);
}
}
}
function print_array ($Array, $parent) {
foreach ($Array as $i1 => &$values1) {
if (is_array($values1)){
foreach ($values1 as $key1 => &$value1) {
if (is_array($value1)) {
print_array($value1,$values1);
}
else {
print " $key1 => $value1\n";
}
}
}
else {
if (preg_match('/l5/',$i1)) {
$values1 = "foobar";
print " $i1 => $values1\n";
}
}
}
}
print_r($a);
好的,我再次检查了您的代码:
l5
到达阵列$a= array('l1'=>array('l2'=>array('l3'=>array('l4'=>array('l5'=>'foo')))));
$a['l1']['l2']['l3']['l4']['l5'] = 'bar';
foreach ($a as $i => &$values) {
foreach ( $values as $key => &$value) {
if (is_array($value)){
print_array($value,$key);
}
}
}
function print_array ($Array, $parent) {
foreach ($Array as $i1 => &$values1) {
if (is_array($values1)){
foreach ($values1 as $key1 => &$value1) {
if (is_array($value1)) {
print_array($value1,$values1);
}
else {
print " $key1 => $value1\n";
}
}
}
else {
if (preg_match('/l5/',$i1)) {
$values1 = "foobar";
print " $i1 => $values1\n";
}
}
}
}
print_r($a);
利用。此代码适用于:
$a =array('l1'=>array('l2'=>array('l3'=>array('l4'=>array('l5'=>'foo')))));
function process(&$array, $needle) {
foreach($array as $k => &$v) {
if ($k == $needle) {
$v = "boooooooooo";
print "$k => $v\n";
}
if (is_array($v)) {
process($v, $needle);
}
}
}
process($a, $needle);
print_r($a);
希望有帮助
哦,下次请用其他钥匙。我一直认为关键是
15
(15),并想知道为什么我的示例不起作用;)(15
看起来与l5
没有太大区别)。因为$value是一个新变量您有几个选择,但都源于同一个问题,这个问题源自这一行
foreach ($array as $key => $value) {
此时,在代码中,$value
不是对数据结构中数组的第二维度的引用。要解决这个问题,您有两个选择
1) 强制引用
foreach ($array as $key => &$value) {
2) 使用“完全限定”表达式设置所需的值
$array[$key][$key2] = 'bar';
谢谢你对foreach的解释,这很有帮助。但是选项1和2给了我语法错误:“PHP解析错误:语法错误,意外的“&”因为&$array和&$value(foreach的起始元素)@健忘症-55:True,我更新了代码。我不确定它们的意思,除非数组被引用,所以我认为
&
必须在数组之前,但它只在值之前。第二个示例:您再次忘记在foreach
子句中的print\u array
函数中引用$values1
和$value1
。我想你也必须参考$value
。费利克斯,谢谢你,这是2D的作品。但是你能看看我编辑的问题吗?用$a作为数组名的那个,让我知道需要做什么更改?非常感谢@费利克斯:我按照你的要求修改了密码,但它仍然不适合我!我需要它拼命工作,因为它会阻塞其他东西。所以请直说我的不耐烦:)你知道吗?请看一看?@amnesia-55:更新了我的答案。谢谢!对于下面的代码,您能否帮助检测foreach中的错误?