Я не могу объединить эти массивы правильно - PullRequest
0 голосов
/ 25 февраля 2020

В API Proxmox я пытаюсь получить список узлов, на которых размещена каждая виртуальная машина, для создания следующего массива:

Массив:

( [vm1] => node1 [vm2] => node2 [vm3] => node2 [vm4] => node2 )

Мой код:

<?php

$vmArray = array();
$multipleVmArray = array();
$nodeArray = array();
$multipleNodeArray = array();

if (empty($onlinenode)) {
    echo "<br>All nodes are down.<br>";
}
else {
    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_MS, $curlTimeOut);

        $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 'Node ' .$server['node']. ' is down (error : ' . curl_error($ch) . ').<br>';
        }
        else {
            $arrays = json_decode($result, true);
            $vmcount = count((array)$arrays['data']);
            if ($vmcount == 0) {
                echo 'Node ' .$server['node']. ' doesn\'t host vm.<br>';
            }
            else if ($vmcount == 1) {
                array_push($vmArray,$arrays['data']['0']['name']);
                array_push($nodeArray,$server['node']);
            }
            else {
                $vmNames = array_column($arrays['data'], 'name');
                array_push($multipleVmArray,$vmNames);
                $nodeArrayFill = array_fill(0, $vmcount, $server['node']);
                array_push($multipleNodeArray,$nodeArrayFill);
            }
        }
        curl_close($ch);
    }
}

$mergedVmArray = array_merge($vmArray,$multipleVmArray);
$mergedNodes = array_merge($nodeArray,$multipleNodeArray);
$combinedArrays = array_combine($mergedVmArray,$mergedNodes);
print_r($combinedArrays);

?>

Но результат: Array ( [winxp] => pve1 [winxp4] => pve3 [Array] => Array ( [0] => pve2 [1] => pve2 ) )

(Не обращайте внимания на названия ВМ и узлы)

И мне хотелось бы: Array ( [vm1] => node1 [vm2] => node2 [vm3] => node2 [vm4] => node2 )

Я не понимаю, почему работает приведенный ниже код, но не при реализации на моем:

<?php

$vmArray = array();
$multipleVmArray = array();
$nodeArray = array();
$multipleNodeArray = array();

array_push($vmArray,"vm1");
array_push($multipleVmArray,"vm2", "vm3", "vm4");
array_push($nodeArray,"node1");
array_push($multipleNodeArray,"node2", "node2", "node2");

$mergedVmArray = array_merge($vmArray,$multipleVmArray);
$mergedNodes = array_merge($nodeArray,$multipleNodeArray);

$combinedArrays = array_combine($mergedVmArray,$mergedNodes);
print_r($combinedArrays);

?>

Есть идеи?

...