I call the Proxmox API to get the names of the vm in each node. This part of code works well (more complete part of my code at the end of this post) :
foreach ($arrays['data'] as $array) {
echo $array['name'];
}
echo : vm1vm2vm3.
But I would like to see this result, separated by commas : vm1, vm2, vm3.
I tried :
foreach ($arrays['data'] as $array) {
echo implode(',', $array['name']);
}
But error : "Warning: implode(): Invalid arguments passed in"
So I tried with :
foreach ($arrays['data'] as $array) {
echo implode(',', (array)$array['name']);
}
No error but no comma. Same result as simple "echo $array['name'];"
And finally I tried :
foreach ($arrays['data'] as $array) {
$vmNameWithComma[] = $array['name'];
echo implode(',', $vmNameWithComma);
}
which returns : vm1vm1,vm2vm1,vm2,vm3.
Any idea ?
foreach ($servers as $server) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://'.$onlinenode.'/api2/json/nodes/'.$server['node'].'/qemu');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Cookie: PVEAuthCookie=' . $cookie;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'La machine ' .$server['node']. ' est injoignable (erreur : ' . curl_error($ch) . ').<br>';
}
else {
$arrays = json_decode($result, true);
$vmcount = count((array) $arrays['data']);
if ($vmcount == 0) {
echo 'Server ' .$server['node']. ' doesn\'t host vm.<br>';
}
else if ($vmcount == 1) {
echo 'Server ' .$server['node']. ' host only one vm which is : ' .$arrays['data']['0']['name']. '<br>';
}
else {
echo 'Server ' .$server['node']. ' host' .$vmcount. ' vm which are : ';
foreach ($arrays['data'] as $array) {
$vmNameWithComma[] = $array['name'];
echo implode(',', $vmNameWithComma);
}
echo '.<br>';
}
}
curl_close($ch);
}