在创建另一个数组后在 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