PHP-替换子数组中的值

PHP-替换子数组中的值,php,replace,arrays,Php,Replace,Arrays,我有两个阵列$pq和$rs。请参见以下内容: $pq = array ('page-0'=>array ('line-0'=>array('item-0'=>array('name'=>"item-00",'value'=>"123"), 'item-1'=>array('name'=>"item-01",'value'=>"456")

我有两个阵列$pq和$rs。请参见以下内容:

$pq = array ('page-0'=>array ('line-0'=>array('item-0'=>array('name'=>"item-00",'value'=>"123"),
                                           'item-1'=>array('name'=>"item-01",'value'=>"456")
                                            ),
                            'line-1'=>array('item-0'=>array('name'=>"item-10",'value'=>"789"),
                                           'item-1'=>array('name'=>"item-11",'value'=>"012")
                                            )),

'page-1'=>array ('line-0'=>array('item-0'=>array('name'=>"item-100",'value'=>"345"),
                                           'item-1'=>array('name'=>"item-101",'value'=>"678")
                                            ),
                            'line-1'=>array('item-0'=>array('name'=>"item-110",'value'=>"901"),
                                           'item-1'=>array('name'=>"item-111",'value'=>"234")
                                            ),
                            'line-2'=>array('item-0'=>array('name'=>"item-210",'value'=>"567"),
                                           'item-1'=>array('name'=>"item-211",'value'=>"890")
                                            ))

);

 $rs = array ('1'=>array('name'=>'item-00', 'value'=>"abc"),
'2'=>array('name'=>'item-01', 'value'=>"def"),
'3'=>array('name'=>'item-10', 'value'=>"ghi"),
'4'=>array('name'=>'item-11', 'value'=>"jkl"),
'5'=>array('name'=>'item-100', 'value'=>"mno"),
'6'=>array('name'=>'item-101', 'value'=>"pqr"),
'7'=>array('name'=>'item-110', 'value'=>"stu"),
'8'=>array('name'=>'item-111', 'value'=>"vwx")
);
我试图做的是将$pq中的值替换为$rs中的值。 例如,将$pa中的项目01替换为$rs中的abc。 我尝试的是:

foreach($rs as &$rs1) {
echo "first count :".$firstCount."<br>";
foreach($pq as $pages) {
    foreach($pages as $lines) {
        foreach($lines as &$item) {
            if ($item['name'] == $rs1['name']) { echo "matching </p>";
                    $item['value']=$rs1['value'];
                echo '<pre>';
                print_r($item);
                echo '</pre>';
                echo "<hr>";
                }


            }
       }

    }
}
foreach($rs as&$rs1){
回显“首次计数:.$FIRSTCUNT.”
“; foreach($pq为$pages){ foreach($pages作为$line){ foreach($line as&$item){ 如果($item['name']=$rs1['name']){echo“匹配”

”; $item['value']=$rs1['value']; 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
打印(项目); 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
回声“
”; } } } } }
当我从$pq打印$item的值时,它从$rs打印值,但是当我打印整个数组$pq时,这些值似乎没有改变。
有人能帮我找出我遗漏了什么吗?

您已经通过引用分配了
$item
,但没有对
$pages
$lines
进行同样的分配。除非通过引用指定
$pages
,否则不会对
$pq
的实际值产生影响;类似地,
$pages
的实际值将保持不变,除非通过引用指定
$lines
。因此,为了实现您的目标,请将
foreach($pages)更改为
foreach($pages)
,将
foreach($pages作为$line)
更改为
foreach($pages作为$line)
您已经通过引用分配了
$item
,但尚未对
$pages
$line执行相同的操作。除非通过引用指定
$pages
,否则不会对
$pq
的实际值产生影响;类似地,
$pages
的实际值将保持不变,除非通过引用指定
$lines
。因此,为了实现您的目标,请将
foreach($pages)更改为
foreach($pages)
,将
foreach($pages作为$line)
更改为
foreach($pages作为$line)
您已经通过引用分配了
$item
,但尚未对
$pages
$line执行相同的操作。除非通过引用指定
$pages
,否则不会对
$pq
的实际值产生影响;类似地,
$pages
的实际值将保持不变,除非通过引用指定
$lines
。因此,为了实现您的目标,请将
foreach($pages)更改为
foreach($pages)
,将
foreach($pages作为$line)
更改为
foreach($pages作为$line)
您已经通过引用分配了
$item
,但尚未对
$pages
$line执行相同的操作。除非通过引用指定
$pages
,否则不会对
$pq
的实际值产生影响;类似地,
$pages
的实际值将保持不变,除非通过引用指定
$lines
。因此,为了实现您想要的,请将
foreach($pq as$pages)
更改为
foreach($pq as&$pages)
并将
foreach($pages as$line)
更改为
foreach($pages as&$line)
您通过引用正确地循环了每行中的项目,但你并不是为了行或页本身。因此,您正在更新行的副本中的项的值,而不是行本身。应该是:

$search = array_reduce($rs, function(&$prev, $current) {
    $prev[$current['name']] = $current;
    return $prev;
}, []);
foreach($rs作为$rs1){
回显“首次计数:.$FIRSTCUNT.”
“; foreach($pq as和$pages){ foreach($pages as&$line){ foreach($line as&$item){ 如果($item['name']=$rs1['name']){echo“匹配”

”; $item['value']=$rs1['value']; 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
打印(项目); 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
回声“
”; } } } } }

请注意,
&$line
&$pages
前面的
&
。还请注意,
$rs1
不需要通过引用传递,因为您不需要更改该数组中的任何内容。

您通过引用正确地循环了每一行中的项目,但您没有对行或页面本身执行此操作。因此,您正在更新行的副本中的项的值,而不是行本身。应该是:

$search = array_reduce($rs, function(&$prev, $current) {
    $prev[$current['name']] = $current;
    return $prev;
}, []);
foreach($rs作为$rs1){
回显“首次计数:.$FIRSTCUNT.”
“; foreach($pq as和$pages){ foreach($pages as&$line){ foreach($line as&$item){ 如果($item['name']=$rs1['name']){echo“匹配”

”; $item['value']=$rs1['value']; 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
打印(项目); 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
回声“
”; } } } } }

请注意,
&$line
&$pages
前面的
&
。还请注意,
$rs1
不需要通过引用传递,因为您不需要更改该数组中的任何内容。

您通过引用正确地循环了每一行中的项目,但您没有对行或页面本身执行此操作。因此,您正在更新行的副本中的项的值,而不是行本身。应该是:

$search = array_reduce($rs, function(&$prev, $current) {
    $prev[$current['name']] = $current;
    return $prev;
}, []);
foreach($rs作为$rs1){
回显“首次计数:.$FIRSTCUNT.”
“; foreach($pq as和$pages){ foreach($pages as&$line){ foreach($line as&$item){ 如果($item['name']=$rs1['name']){echo“匹配”

”; $item['value']=$rs1['value']; 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
打印(项目); 回声';
foreach($rs as $rs1) {
    echo "first count :".$firstCount."<br>";
    foreach($pq as &$pages) {
        foreach($pages as &$lines) {
            foreach($lines as &$item) {
                if ($item['name'] == $rs1['name']) { echo "matching </p>";
                        $item['value']=$rs1['value'];
                    echo '<pre>';
                    print_r($item);
                    echo '</pre>';
                    echo "<hr>";
                } 

            }
       }

    }
}
foreach ($pq as &$page_data) {
  foreach ($page_data as &$line_data) {
    foreach ($line_data as &$item_data) {
      if (isset($search[$item_data['name']])) {
        $item_data = $search[$item_data['name']];
      }
    }
  }
}
回声“
”; } } } } }
请注意,前面的
<