взорвать массив с "," - PullRequest
       89

взорвать массив с ","

1 голос
/ 22 февраля 2020

Я вызываю API Proxmox, чтобы получить имена виртуальных машин в каждом узле. Эта часть кода работает хорошо (более полная часть моего кода в конце этого поста):

foreach ($arrays['data'] as $array) {
    echo $array['name'];
}

echo: vm1vm2vm3.

Но я хотел бы увидеть этот результат, через запятую: vm1, vm2, vm3.

Я пытался:

foreach ($arrays['data'] as $array) {
    echo implode(',', $array['name']);
}

Но ошибка: "Warning: implode(): Invalid arguments passed in"

Итак, я пытался с:

foreach ($arrays['data'] as $array) {
    echo implode(',', (array)$array['name']);
}

Нет ошибки, но нет запятой. Тот же результат, что и простой "echo $ array ['name'];"

И наконец я попытался:


foreach ($arrays['data'] as $array) {
    $vmNameWithComma[] = $array['name'];
    echo implode(',', $vmNameWithComma);
}

, который возвращает: vm1vm1,vm2vm1,vm2,vm3.

Есть идеи?

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

1 Ответ

1 голос
/ 22 февраля 2020

Вам не нужны foreach l oop.

. Вам нужно создать массив только из name столбцов, а затем вызвать implode() для этого.

$names = array_column($arrays['data'], 'name');
echo implode(',', $names);
...