在创建另一个数组后在 php 中使用 array_combine 时数据被覆盖
data gets overwritten when using array_combine in php after creating another array
正在尝试弄清楚如何用值更新新数组。
$data = array('[ETRA-VRTR-MIB::vRtrIfName.1.1]' => 'STRING: "intf1"', '[ETRA-VRTR-MIB::vRtrIfName.1.2]' => 'STRING: "intf2"');
echo '<pre>';
print_r($data);
foreach($data as $key => $val) {
$newval = explode(':',trim($val, 'STRING: '));
$newkey = explode(' ',trim($key, '[ETRA-VRTR-MIB::vRtrIfName.]'));
$Array = array_combine($newkey, $newval);
echo '<pre>';
print_r($Array);
}
$data = $Array;
echo '<pre>';
print_r($data);
for循环前的第一个打印输出
Array
(
[[ETRA-VRTR-MIB::vRtrIfName.1.1]] => STRING: "intf1"
[[ETRA-VRTR-MIB::vRtrIfName.1.2]] => STRING: "intf2"
)
for 循环中的第二次打印输出
Array
(
[1.1] => "intf1"
)
Array
(
[1.2] => "intf2"
)
$data的第三个打印输出
Array
(
[1.2] => "intf2"
)
如您所见,它被覆盖,因此只显示第二个数组。试图找出如何遍历 $Array 并为其分配适当的键。最终的 $data 应该如下所示。
Array
(
[1.1] => "intf1"
)
Array
(
[1.2] => "intf2"
)
非常感谢您的帮助。
这是因为您没有在循环中合并之前的数组,这就是它覆盖 try array_merge()
的原因,如下所示:
<?php
$data = array('[ETRA-VRTR-MIB::vRtrIfName.1.1]' => 'STRING: "intf1"', '[ETRA-VRTR-MIB::vRtrIfName.1.2]' => 'STRING: "intf2"');
echo '<pre>';
print_r($data);
$Array = array();
foreach($data as $key => $val) {
$newval = explode(':',trim($val, 'STRING: '));
$newkey = explode(' ',trim($key, '[ETRA-VRTR-MIB::vRtrIfName.]'));
$Array = array_merge($Array, array_combine($newkey, $newval));
echo '<pre>';
print_r($Array);
}
$data = $Array;
echo '<pre>';
print_r($data);
检查这里的输出 https://paiza.io/projects/WXZPyYsiYH9ZtLXa3axGKw?language=php
正在尝试弄清楚如何用值更新新数组。
$data = array('[ETRA-VRTR-MIB::vRtrIfName.1.1]' => 'STRING: "intf1"', '[ETRA-VRTR-MIB::vRtrIfName.1.2]' => 'STRING: "intf2"');
echo '<pre>';
print_r($data);
foreach($data as $key => $val) {
$newval = explode(':',trim($val, 'STRING: '));
$newkey = explode(' ',trim($key, '[ETRA-VRTR-MIB::vRtrIfName.]'));
$Array = array_combine($newkey, $newval);
echo '<pre>';
print_r($Array);
}
$data = $Array;
echo '<pre>';
print_r($data);
for循环前的第一个打印输出
Array
(
[[ETRA-VRTR-MIB::vRtrIfName.1.1]] => STRING: "intf1"
[[ETRA-VRTR-MIB::vRtrIfName.1.2]] => STRING: "intf2"
)
for 循环中的第二次打印输出
Array
(
[1.1] => "intf1"
)
Array
(
[1.2] => "intf2"
)
$data的第三个打印输出
Array
(
[1.2] => "intf2"
)
如您所见,它被覆盖,因此只显示第二个数组。试图找出如何遍历 $Array 并为其分配适当的键。最终的 $data 应该如下所示。
Array
(
[1.1] => "intf1"
)
Array
(
[1.2] => "intf2"
)
非常感谢您的帮助。
这是因为您没有在循环中合并之前的数组,这就是它覆盖 try array_merge()
的原因,如下所示:
<?php
$data = array('[ETRA-VRTR-MIB::vRtrIfName.1.1]' => 'STRING: "intf1"', '[ETRA-VRTR-MIB::vRtrIfName.1.2]' => 'STRING: "intf2"');
echo '<pre>';
print_r($data);
$Array = array();
foreach($data as $key => $val) {
$newval = explode(':',trim($val, 'STRING: '));
$newkey = explode(' ',trim($key, '[ETRA-VRTR-MIB::vRtrIfName.]'));
$Array = array_merge($Array, array_combine($newkey, $newval));
echo '<pre>';
print_r($Array);
}
$data = $Array;
echo '<pre>';
print_r($data);
检查这里的输出 https://paiza.io/projects/WXZPyYsiYH9ZtLXa3axGKw?language=php