0
ネストされた配列では、キーxをyで変更したいと思います。たとえば:PHPでネストされた配列のキーを更新するには?
clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount
になる必要があります。
clonedAssetSource - 2000:clonedAssetSource - 2000._jvxMatchCount.
私は再帰的な解決策を書いたが、それは働いていません。ここで私は、ネストされた配列にデコードJSONは次のとおりです。
function updateConditions(&$conditions, $oldDataServiceName, $newDataServiceName) {
foreach($conditions as $condIndex => $condition){
foreach($condition['selectors'] as $selIndex => $sel)
foreach($sel as $ruleIndex => $condValue){
if($ruleIndex != 'id' && $ruleIndex !='comparator') {
$compareKey = $oldDataServiceName.":".$oldDataServiceName."._jvxMatchCount";
if($ruleIndex == $compareKey) {
unset($conditions[$condIndex]['selectors'][$selIndex][$ruleIndex]);
$newKey = $newDataServiceName.":".$newDataServiceName."._jvxMatchCount";
$conditions[$condIndex]['selectors'][$selIndex][$newKey] = $condValue;
}
}
}
}
if(isset($condition['conditions'])){
updateConditions($condition['conditions'], $oldDataServiceName, $newDataServiceName);
}
}
return true;
}
と、次のように私は、配列$ rulePackageArrそれを渡す上記の関数を呼び出し:
{
"defaultAssetGroup":"def",
"data":[
{
"id":"R-136-11821-1479722207355",
"ruleName":"Rule 1",
"reportConfig":{
"includeAssetSources":[
"773"
]
},
"creative_groups":[
"base1"
],
"conditions":[
{
"id":"R-136-11821-1479722207355",
"operator":"and",
"selectors":[
{
"id":"TRI-R-136-11821-1479722220855",
"comparator":"equals",
"device:device.model":"iPhone"
},
{
"id":"TRI-R-136-11821-1479741956751",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"20"
},
{
"id":"TRI-R-136-11821-1479742095900",
"comparator":"greater-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"20"
},
{
"id":"TRI-R-136-11821-1479742096434",
"comparator":"less-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"20"
}
],
"conditions":[
{
"id":"R-136-11821-1479744209533",
"operator":"and",
"selectors":[
{
"id":"TRI-R-136-11821-1479744228986",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"10"
},
{
"id":"TRI-R-136-11821-1479744230911",
"comparator":"greater-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"10"
},
{
"id":"TRI-R-136-11821-1479744232111",
"comparator":"less-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"10"
}
],
"conditions":[
{
"id":"R-136-11821-1479744233099",
"operator":"and",
"selectors":[
{
"id":"TRI-R-136-11821-1479744234649",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"12"
},
{
"id":"TRI-R-136-11821-1479744235059",
"comparator":"greater-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"12"
},
{
"id":"TRI-R-136-11821-1479744237266",
"comparator":"less-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"12"
}
],
"conditions":[
]
}
]
}
]
}
]
},
{
"id":"R-136-11821-1479744343408",
"ruleName":"Rule 2",
"reportConfig":{
"includeAssetSources":[
"773"
]
},
"creative_groups":[
],
"conditions":[
{
"id":"R-136-11821-1479744343408",
"operator":"and",
"selectors":[
{
"id":"TRI-R-136-11821-1479744356803",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"8"
},
{
"id":"TRI-R-136-11821-1479744357331",
"comparator":"greater-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"8"
},
{
"id":"TRI-R-136-11821-1479744360713",
"comparator":"less-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"8"
}
],
"conditions":[
{
"id":"R-136-11821-1479744362635",
"operator":"and",
"selectors":[
{
"id":"TRI-R-136-11821-1479744363763",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"9"
},
{
"id":"TRI-R-136-11821-1479744363991",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"9"
},
{
"id":"TRI-R-136-11821-1479744365361",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"9"
}
],
"conditions":[
{
"id":"R-136-11821-1479744366147",
"operator":"and",
"selectors":[
{
"id":"TRI-R-136-11821-1479744367734",
"comparator":"equals",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"3"
},
{
"id":"TRI-R-136-11821-1479744367950",
"comparator":"greater-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"3"
},
{
"id":"TRI-R-136-11821-1479744368203",
"comparator":"less-than",
"clonedAssetSource - 1479722826:clonedAssetSource - 1479722826._jvxMatchCount":"3"
}
],
"conditions":[
]
}
]
}
]
}
]
}
],
"assetSources":[
{
"dataSignal":"tagVarService",
"property":"DataSignal1",
"assetDatabase":"773",
"addToCreativeId":true
}
],
"reportingKeyFormat":"ruleDefined",
"virtualAssets":[
{
"assetId":"customAsset.asset103",
"assetDatabase":"773",
"keyColumn":"Image",
"assetProperty":"icon"
}
]
}
これは私のコードスニペットです
if(!empty($newDataServiceNames)) {
foreach ($newDataServiceNames as $oldDataServiceName => $newDataServiceName) {
if(!empty($rulePackageArr['data'])){
foreach($rulePackageArr['data'] as $key => $data){
updateConditions($rulePackageArr['data'][$key]['conditions'], $oldDataServiceName, $newDataServiceName);
}
}
}
}
正規表現を使用しないのはなぜ? – Eric
2番目の 'foreach'には省略カッコがあります。 – trincot
NB: 'json'タグを削除しました。配列がJSONからデコードされたという事実は、ここで実際には関係ありません。 – trincot