首页 > 解决方案 > 在创建另一个数组后在 php 中使用 array_combine 时,数据被覆盖

问题描述

试图弄清楚如何用一个值更新新数组。

$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"
)

非常感谢你的帮助。

标签: phparraysreplacemibsnmpwalk

解决方案


这是因为您没有合并循环中的前一个数组,这就是它覆盖尝试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


推荐阅读