PHP-替换子数组中的值
我有两个阵列$pq和$rs。请参见以下内容: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 = 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']];
}
}
}
}
回声“
”;
}
}
}
}
}
请注意,前面的和<