我想替换数组中的键,因为我会将它们移到两个索引上。 我面临的问题是,如果我想将它们包含相同的名称,那将是不可能的。
这是数组的样子。
@Qualifier
annotation class ApplicationContext
);
这就是我希望通过在参数内部的Name0,Name1中更改键来实现输出的方式。
$list = array(
'ind' => array(
'messagetype' => 'Alert',
'visibility' => 'Public',
'info' => array(
0 => array(
'urgency' => 'Urgent',
'params' => array(
0 => array(
'Name' => 'display',
'value' => '3; top',
),
1 => array(
'Name' => 'level',
'value' => '1; blue',
),
),
'area' => array(
'ard' => 'Bob',
'code' => array(
0 => array(
'Name' => 'Badge',
'value' => 'GSSD154',
),
),
),
),
1 => array(
'messagetype' => 'Information',
'visibility' => 'Private',
'info' => array(
0 => array(
'urgency' => 'Minor',
'params' => array(
0 => array(
'Name' => 'display',
'value' => '1; left',
),
1 => array(
'Name' => 'level',
'value' => '1; red',
),
),
'area' => array(
'ard' => 'Bob',
'code' => array(
0 => array(
'Name' => 'Badge',
'value' => 'GBECS23',
),
),
),
),
),
),
),
),
);
我在此网站上尝试了很多示例,但找不到一个示例可以实现。 我从中使用的代码 How to replace key in multidimensional array and maintain order
$list = array(
'ind' => array(
'messagetype' => 'Alert',
'visibility' => 'Public',
'info' => array(
0 => array(
'urgency' => 'Urgent',
'params' => array(
0 => array(
'Name0' => 'display',
'value0' => '3; top',
),
1 => array(
'Name1' => 'level',
'value1' => '1; blue',
),
),
'area' => array(
'ard' => 'Bob',
'code' => array(
0 => array(
'Name' => 'Badge',
'value' => 'GSSD154',
),
),
),
),
1 => array(
'messagetype' => 'Information',
'visibility' => 'Private',
'info' => array(
0 => array(
'urgency' => 'Minor',
'params' => array(
0 => array(
'Name0' => 'display',
'value0' => '1; left',
),
1 => array(
'Name1' => 'level',
'value1' => '1; red',
),
),
'area' => array(
'ard' => 'Bob',
'code' => array(
0 => array(
'Name' => 'Badge',
'value' => 'GBECS23',
),
),
),
),
),
),
),
),
目前我得到以下输出:
function replaceKey($subject, $newKey, $oldKey) { // if the value is not an array, then you have reached the deepest // point of the branch, so return the value if (!is_array($subject)) { return $subject; } $newArray = array(); // empty array to hold copy of subject foreach ($subject as $key => $value) { // replace the key with the new key only if it is the old key $key = ($key === $oldKey) ? $newKey : $key; // add the value with the recursive call $newArray[$key] = replaceKey($value, $newKey, $oldKey); } return $newArray; } $s = replaceKey($list, 'Name0', 'Name'); print "<PRE>"; print_r($s);
[0] => Array
(
[Name0] => display
[value] => 1; left
)
任何帮助将不胜感激。问候
答案 0 :(得分:1)
一个非常奇怪的问题,但为什么不呢?
以下函数不返回任何内容(过程),并使用引用更改数组 ,但可以将其重写为“ real” 函数(不带引用)并在某处带有return
语句)。
该想法包括使用数字键和至少2个项目搜索数组,其中每个项目都具有 Name 和 value 键。换句话说,这种方法并不关心目标应该位于的路径:
function replaceKeys(&$arr) {
foreach ($arr as &$v) {
if ( !is_array($v) )
continue;
$keys = array_keys($v);
if ( count($keys) < 2 ||
$keys !== array_flip($keys) ||
array_keys(array_merge(...$v)) !== ['Name', 'value'] ) {
replaceKeys($v);
continue;
}
foreach ($v as $k => &$item) {
$item = array_combine(["Name$k", "value$k"], $item);
}
}
}
replaceKeys($list);
print_r($list);