在创建另一个数组后,在php中使用array_combine时,数据会被覆盖

在创建另一个数组后,在php中使用array_combine时,数据会被覆盖,php,arrays,replace,mib,snmpwalk,Php,Arrays,Replace,Mib,Snmpwalk,试图找出如何使用值更新新数组 $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) { $new

试图找出如何使用值更新新数组

$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
(
 [1.1] => "intf1"
)
Array
(
 [1.2] => "intf2"
)
<?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);
$data的第三次打印输出

如您所见,它被覆盖,因此只显示第二个数组。试图找出如何遍历$Array并为其分配适当的键。最终美元数据应如下所示


非常感谢您的帮助。

这是因为您没有在循环中合并上一个数组,这就是为什么它会覆盖try
array\u merge()
如下所示:


谢谢,但当我这样做时,最终的$data输出将变成这样,这不是我想要的。数组([[ETRA-VRTR-MIB::vRtrIfName.1.1]]=>字符串:“intf1”[[ETRA-VRTR-MIB::vRtrIfName.1.2]=>字符串:“intf2”)请在此处尝试此工作代码或复制我的答案代码希望最终输出的$data存储为此。。数组([1.1]=>“intf1”)数组([1.2]=>“intf2”)不确定原因,但收到PHP警告:Array_merge():参数1应为数组,给定null,并指向以下代码:$Array=Array_merge($Array,Array_combine($newkey,$newval));你知道为什么吗?它被定义为一个数组。让我看看你的代码,我想你没有在foreach上面声明$array=array()
   Array
   (
    [1.2] => "intf2"
   )
Array
(
 [1.1] => "intf1"
)
Array
(
 [1.2] => "intf2"
)
<?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);