Работы с массивами с ключами PHP

192
02 февраля 2019, 06:40

Есть массив на PHP вида:

$packages = [
    'A' => [
            'name' => 'A',
            'dependencies' => ['B','C'],
    ],
    'B' => [
            'name' => 'B',
            'dependencies' => [],
    ],
    'C' => [
            'name' => 'C',
            'dependencies' => ['B','D'],
    ],
    'D' => [
            'name' => 'D',
            'dependencies' => [],
    ]
]

Реализовать на PHP. Ключи А В С D - это названия пакетов. Dependencies - это их зависимости, то есть: Пакет А зависит от В и С, идем в В, там пусто, возвращаемся к А, вторая зависимость это С, идем в С, там зависимости от В и D. Значит, идем в В, там пусто, потом в D, там тоже пусто, значит циклической зависимости нет. А если в пакет D добавить пакет А, то будет циклическая зависимость.

Так же, необходимо реализовать функцию, которая будет выводить зависимости своих зависимостей, а потом свои зависимости для выбранного пакета. Не могу реализовать программно эту задачу, помогите, пожалуйста.

Answer 1

Я затрудняюсь именно в том, что я не могу разработать алгоритм программно, который будет делать то, что нужно. Это не вся задача, там были еще пункты, их я сделал, а эти нет. Если вам так нужно, то вот.

function validatePackageDefinitions(array $packages)
{
    $name = "name";
    $dependencies = "dependencies";
    $keyName = 0;
    $keyExist = 0;
    $n = 0;
    foreach($packages as $key3 => $value3)
    {
        $arrayOfKeys[$n] = $key3;
        $n++;
    }
    foreach ($packages as $key => $value)
    {
        $i = 0;
        if ($key == $value[$name])
        {
            $keyName++;
            echo "Ключ массива совпадает с его именем ";
        }
        else
        {
            echo "Ключ массива не совпадает с его именем ";
        }
        if(array_key_exists($dependencies, $value))
        {
            $keyExist++;
            echo "Существует элемент с ключом $dependencies ";
        }
        else
        {
            echo "Элемент с ключом $dependencies не существует ";
        }
        if ($value[$dependencies] == NULL)
        {
             echo "Ключ указывает на пустую ячейку ";
        }
        else
        {
            foreach($value[$dependencies] as $key2 => $value2)
            {
                for ($l = 0; $l <= count($arrayOfKeys); $l++)
                {
                    $newArray[$l] = ['$arrayOfKeys[$l]' => [$value2]];
                }
                $arrayOfDependencies[$i] = $value2;
                echo "$value2 ";
                $i++;
            }   
        }
        for ($j = 0; $j < $i; $j++)
        {
            if (in_array($arrayOfDependencies[$j], $arrayOfKeys))
            {
                echo "exist! "; 
            }
        }     
        echo '<br>';
    }
}

А то что касается именно описанной задачи здесь - ничего. Я придумал алгоритм, что если мы будем ходить по зависимостям и мы пройдем через одну и ту же зависимость больше раз, чем она находится в dependencies, то у нас циклическая зависимость. Но я ну вооооообще не знаю, как это сделать.

READ ALSO
Скачать все зависимости XSL

Скачать все зависимости XSL

Появилась задача скачать XSL шаблоны к себе на серверНо в них много таких строчек: select="document('schema/dict

174
Из числа 1592 получить 31592 при помощи рекурсии [закрыт]

Из числа 1592 получить 31592 при помощи рекурсии [закрыт]

Задача: Рекурсивно описать функцию Head3(N), которая вычисляет число, получаемое приписыванием слева цифры 3 к десятичной записи целого положительного...

151
Как много времени тратит функция srand(time(NULL))?

Как много времени тратит функция srand(time(NULL))?

Сильно ли использование srand(time(NULL)) замедляет код, если эта функция выполняется в цикле наряду с остальным кодом? (примерно 10000 итераций в секунду,...

165