我有一个包含4个元素$device_report = [];
的数组,其中包含这些数据
array:4 [▼
0 => array:2 [▼
"up_bytes" => 2818
"down_bytes" => 948
]
1 => array:2 [▼
"up_bytes" => 472
"down_bytes" => 439
]
2 => array:2 [▼
"up_bytes" => 3364
"down_bytes" => 1317
]
3 => array:2 [▼
"up_bytes" => 3102
"down_bytes" => 1682
]
]
现在,我有这个
$device_report = [];
foreach ($devices as $device){
$device_mac = $device->device_mac; //080027E2FC7D
$data = VSE::device($device_mac);
array_push($device_report,$data);
}
我试过
$device_report = [];
foreach ($devices as $device){
$device_mac = $device->device_mac; //080027E2FC7D
$data = VSE::device($device_mac);
array_push($device_report[$device_mac],$data);
}
它给我错误:
array_push() expects parameter 1 to be array, null given
我只想将我的密钥作为特定设备的Mac地址而不是0,1,2,3。
任何提示都将不胜感激!
答案 0 :(得分:2)
根据文档array_push
:
int array_push ( array &$array , mixed $value1 [, mixed $... ] )
array_push()
将数组视为堆栈,并将传递的变量推送到数组的末尾。数组的长度增加了推送的变量数。具有与以下相同的效果:
在您的特定情况下,您尝试创建新密钥并分配数组,因此您会收到$device_report[$device_mac]
不是数组的错误。这确实是正确的,因为密钥尚不存在。
要解决此问题,请直接指定数组,而不是使用array_push
。
试试这个:
$device_report[$device_mac] = $data;
而不是:
array_push($device_report[$device_mac], $data);
答案 1 :(得分:1)
尝试以下方法:
$device_report = [];
foreach ($devices as $device){
$device_mac = $device->device_mac; //080027E2FC7D
$data = VSE::device($device_mac);
//add this to init the array.
if (is_array($device_report[$device_mac]) === false) {
$device_report[$device_mac] = [];
}
array_push($device_report[$device_mac],$data);
}
出现错误消息,因为$device_report[$device_mac]
为空。您必须使用数组初始化值。使用以下代码,如果没有可用的数组,则使用空数组初始化它:
//add this to init the array.
if (is_array($device_report[$device_mac]) === false) {
$device_report[$device_mac] = [];
}
答案 2 :(得分:1)
我不会为此使用array_push。没理由。
$device_report = [];
foreach ($devices as $device){
$device_mac = $device->device_mac; //080027E2FC7D
$data = VSE::device($device_mac);
$device_report[$device_mac]=$data; // <-- This line changed
}