php - 在创建另一个数组后在 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"
)
非常感谢你的帮助。
解决方案
这是因为您没有合并循环中的前一个数组,这就是它覆盖尝试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
推荐阅读
- ios - How to display the data in the nested section in the tableview
- c# - C# - 锁定目录,直到所有文件都复制到其中
- java - Java:DTO 集合内的值总和
- java - 查找转换为十进制数时的二进制数是否为 2 的幂?
- hyperledger-fabric - Hyperledger Fabric 中的多个主机连接
- apache-spark - 为什么只有一个核心承担所有负载,如何让其他29个核心承担负载?
- jclouds - 带有 multipart() 选项的 B2 存储和 jclouds 出错
- r - 如何将 60 个时间值附加到 400 万个串联经度和纬度值的列表中?
- java - Firebase 数据库身份验证注册
- postgresql - 带有 Powershell for Postgresql 的 Dbup(.net 库)