php - 关联数组更改键值
问题描述
我有以下代码来遍历 json 数组并更改数组中的值。
<?php
$json='[{"type":"dropdown","label":"Is the property tenanted ?","req":0,"choices":[{"label":"Yes","sel":0,"notification":0,"subOptions":[{"NoteLabel":"Real Estate Agency ?","NoteValue":"","reqNote":"1"},{"NoteLabel":"Agents Mobile Number:","NoteValue":"","reqNote":"1"},{"NoteLabel":"Agents Email:","NoteValue":"","reqNote":"0"},{"PhotoLabel":"Attach a photo","PhotoValues":"","reqPhoto":"1"},{"NoteLabel":"Tenants Contact Number:","NoteValue":"","reqNote":"0"}]},{"label":"No","sel":1,"notification":0,"subOptions":[{"NoteLabel":"Clients Contact Number:","NoteValue":"","reqNote":"1"},{"PhotoLabel":"Attach a photo","PhotoValues":"","reqPhoto":"1"}]},{"label":"N\/A","sel":0,"notification":0,"subOptions":[]}]}]';
echo $json."<br/>";
echo "<br/><br/><br/>****************<br/><br/><br/>";
$json=json_decode($json,true);
foreach($json as $kSub => $vSub)
{
if( in_array($vSub['type'], ["dropdown"]))
{
if($vSub['label']=="Is the property tenanted ?")
{
$choices=&$vSub['choices'];
foreach($choices as $keyChoice=>&$valChoice)
{
if($valChoice['label']=="Yes")
{
$subOptions=&$valChoice['subOptions'];
foreach($subOptions as $kop=>&$Opval)
{
foreach($Opval as $kn=>&$vn)
{
if($kn=="NoteLabel")
{
if($vn=="Real Estate Agency ?")
{
$subOptions[$kop]['NoteValue']="DOMAIN";
}
}
}
}
}
}
}
}
}
echo json_encode($json)."<br/>";
如果满足条件,我想更改NoteValue
内部数组。subOptions
我不确定我是否做对了,但价值没有改变。请帮我解决我做错了什么!我还想知道是否可以减少代码行数以获得结果?
解决方案
您需要使用&vSub
它来使其成为参考变量。
您可以通过摆脱最后一个循环来缩短代码,NoteLabel
直接访问索引。您还可以将前两个测试与&&
. foreach
而且您的循环中不需要任何索引变量。
foreach($json as &$vSub)
{
if($vSub['type'] == "dropdown" && $vSub['label']=="Is the property tenanted ?")
{
$choices=&$vSub['choices'];
foreach($choices as &$valChoice)
{
if($valChoice['label']=="Yes")
{
$subOptions=&$valChoice['subOptions'];
foreach($subOptions as &$Opval)
{
if (isset($Opval['NoteLabel']) && $Opval['NoteLabel'] == "Real Estate Agency ?")
{
$Opval['NoteValue']="DOMAIN";
}
}
}
}
}
}
推荐阅读
- json - 无法读取未定义的属性“rotationOffset”
- yaml - 如何将 YAML 锚合并为列表项并覆盖值
- google-apps-script - GAS:通过自定义 UI 菜单的脚本授权失败,并显示“您无权执行该操作”。
- ruby-on-rails - 我的 js 文件中有两个 ajax 获取请求。我无法阻止第二个请求中的默认行为
- react-native - realm react-native:如何正确查询字符串数组
- reporting-services - 如何为空的 SSRS 组显示一些静态文本?
- java - 如何安装 jtransc?
- javascript - 是否可以自动选择带有 chrome 扩展名的文件输入的文件?
- jquery - div元素上的悬停事件
- php - 稍后初始化(子)类并将其附加到实例化的父级