2015-11-25 20 views
1

我有4個元素$device_report = [];這些數據在它如何使用PHP構建具有特定鍵的數組?

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。

任何提示將不勝感激!

+4

只要做:'$ device_report [$ device_mac] = $ data;' – Rizier123

+0

短小精緻。謝謝。 – ihue

+0

另請參閱:http://stackoverflow.com/q/2121548/3933332 – Rizier123

回答

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 
} 
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

嘗試以下方法:出現

$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] = []; 
} 
相關問題