在嵌套数组-PHP中替换值
我是新手的stackoverflow。我有一个问题。该代码如何更适合嵌套数组中的价值更换?
例如,我从JSON文件中获得此数组:
$json_file = "template.json";
$json = file_get_contents($json_file);
$array = json_decode($json, true);
现在,我获得包含某些搜索值的数组$ res:
function array_recursive_search_key_map($needle, $haystack) {
foreach($haystack as $first_level_key=>$value) {
if ($needle === $value) {
return array($first_level_key);
} elseif (is_array($value)) {
$callback = array_recursive_search_key_map($needle, $value);
if ($callback) {
return array_merge(array($first_level_key), $callback);
}
}
}
return false;
}
$res = array_recursive_search_key_map("id|logo", $array);
执行此操作,$ res包含嵌套$ array中搜索值的位置:
$res = ["content",0,"elements",0,"elements",0,"elements",0,"elements",0,"settings","_attributes"]
我想替换progamationally prog上的值在:
$array["content"][0]["elements"][0]["elements"][0]["elements"][0]["elements"][0]["settings"]["_attributes"] = "some new value";
我创建了一个新功能,但我认为不是很实际:
function recursive_replacement($keymap, $newvalue)
{
$size = sizeof($keymap);
switch ($size)
{
case 1:
$array[$keymap[0]] = $newvalue;
break;
case 2:
$array[$keymap[0]][$keymap[1]] = $newvalue;
break;
case 3:
$array[$keymap[0]][$keymap[1]][$keymap[2]] = $newvalue;
break;
case 4:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]] = $newvalue;
break;
case 5:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]] = $newvalue;
break;
case 6:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]] = $newvalue;
break;
case 7:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]] = $newvalue;
break;
case 8:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]][$keymap[7]] = $newvalue;
break;
case 9:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]][$keymap[7]][$keymap[8]] = $newvalue;
break;
case 10:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]][$keymap[7]][$keymap[8]][$keymap[9]] = $newvalue;
break;
}
return $array;
}
使用方式:
$new_array = recursive_replacement($res, "some new value");
任何建议都将不胜感激。谢谢!
i am new on stackoverflow. I have a question. How do this code more appropiate for value replacement in nested arrays?
For example, i have this array obtained from json file:
$json_file = "template.json";
$json = file_get_contents($json_file);
$array = json_decode($json, true);
Now, i obtain the array $res that contain certain searched value:
function array_recursive_search_key_map($needle, $haystack) {
foreach($haystack as $first_level_key=>$value) {
if ($needle === $value) {
return array($first_level_key);
} elseif (is_array($value)) {
$callback = array_recursive_search_key_map($needle, $value);
if ($callback) {
return array_merge(array($first_level_key), $callback);
}
}
}
return false;
}
$res = array_recursive_search_key_map("id|logo", $array);
Doing this, $res contains the position of the searched value in nested $array:
$res = ["content",0,"elements",0,"elements",0,"elements",0,"elements",0,"settings","_attributes"]
I want to replace progamatically the value in:
$array["content"][0]["elements"][0]["elements"][0]["elements"][0]["elements"][0]["settings"]["_attributes"] = "some new value";
I was created a new function but i think are not very practically:
function recursive_replacement($keymap, $newvalue)
{
$size = sizeof($keymap);
switch ($size)
{
case 1:
$array[$keymap[0]] = $newvalue;
break;
case 2:
$array[$keymap[0]][$keymap[1]] = $newvalue;
break;
case 3:
$array[$keymap[0]][$keymap[1]][$keymap[2]] = $newvalue;
break;
case 4:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]] = $newvalue;
break;
case 5:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]] = $newvalue;
break;
case 6:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]] = $newvalue;
break;
case 7:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]] = $newvalue;
break;
case 8:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]][$keymap[7]] = $newvalue;
break;
case 9:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]][$keymap[7]][$keymap[8]] = $newvalue;
break;
case 10:
$array[$keymap[0]][$keymap[1]][$keymap[2]][$keymap[3]][$keymap[4]][$keymap[5]][$keymap[6]][$keymap[7]][$keymap[8]][$keymap[9]] = $newvalue;
break;
}
return $array;
}
And the use way:
$new_array = recursive_replacement($res, "some new value");
Any suggestion would be appreciated. Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在第一步,我们需要一个符号来解决数组中的项目,我喜欢点表示法,
例如'item_1.item_3.0'而不是$ array ['item_1'] ['item_3'] [0]
现在我们需要在我们的地址密钥上迭代并找到目标元素,
现在让我们测试我们的新功能,
现在可以进行前进
At the very first step we need a notation to address an item in an array, i like the dot notation
For example 'item_1.item_3.0' instead of $array['item_1']['item_3'][0]
Now we need to iterate on our address key and find destination element
Now lets test our new function
Now You can progamatically