Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 14.03.2016
Сообщений: 7

Поиск по многомерному массиву

11.02.2019, 13:19. Показов 932. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем привет! В прошлый раз (Массив, рекурсия) я делала поиск пути по обычному массиву. Сейчас усложнила, делаю по многомерному. Функция должна находить два пути. Она их находит, но второй неверный. Помогите, пожалуйста понять, в чём проблема.

Вот код.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function showWay($paths, $way = null, $allNeedWays = null)
{
    if ($way === null) {
        reset($paths);
        $way[] = key($paths);
    }
 
    if ($paths[end($way)] === 'end') {
        return $way;
    }
    $allWays = $paths[end($way)];
    //$way[] = $allWays[0];
 
    foreach ($allWays as $stations) {
        $way[] = $stations;
        $newWay = showWay($paths, $way, $allNeedWays);
 
        if ($newWay !== null) {
            $allNeedWays[] = $newWay;
        }
    }
 
return showWay($paths, $way);
}
 
$paths = array(
    1 => [3,4],
    2 => [4],
    3 => [2],
    4 => [5],
    5 => 'end');
 
var_dump(showWay($paths)); // [1,3,2,4,5][1,4,5]
Путь [1,3,2,4,5] функция находит. А вместо второго [1,4,5], она находит [1,3,4,5].
Как сделать, чтобы функция находила [1,3,2,4,5][1,4,5]?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2019, 13:19
Ответы с готовыми решениями:

Поиск по многомерному массиву
Делаю для своего сайта форму бронирования, уже сделал все остался последний штрих, разобрать многомерный массив полученный из БД, бъюсь 3...

Обращение к многомерному массиву
Доброго времени суток, подскажите, может я чего не вижу, есть двухмерный ассоциативный массив формата json $arrays = array(2) { =>...

проход по многомерному массиву
Есть двухмерный массив $mass = 1; $mass = 1; $mass = 1; $mass = 1; $mass = 1; $mass = 1; $mass = 0;

2
0 / 0 / 0
Регистрация: 14.03.2016
Сообщений: 7
12.02.2019, 01:39  [ТС]
Посмотрела все похожие темы, но везде немного не то.
Мне нужно сделать эту задачу с использованием РЕКУРСИИ.

на данном этапе функция выдаёт два пути [1,3,2,4,5] и [1,3, 4,5], и то она не выводится, если убрать var_dump($test); из if((
а должна выводить [1,3,2,4,5][1,4,5]

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function showWay($paths, $way = null)
{
    if ($way === null) {
        reset($paths);
        $way[] = key($paths); // 1
    }
 
    $allStations = $paths[end($way)]; //3,4
 
 
    if ($allStations === 'end') {
        return $way; // 1,3,2,4,5 | 1,3,4,5
    }
 
    foreach ($allStations as $station) {
        $way[] = $station;
 
        $test = showWay($paths, $way);
 
        if ($test !== null) {
            var_dump($test);
        }
    }
    return null;
}
 
$paths = array(
    1 => [3, 4],
    2 => [4],
    3 => [2],
    4 => [5],
    5 => 'end');
 
print_r(showWay($paths));
Я посмотрела все другие темы на форуме, посвященные массивам и облазила гугл вдоль и поперек.
Пожалуйста, помогите, люди!
0
14 / 8 / 7
Регистрация: 09.01.2018
Сообщений: 151
12.02.2019, 08:36
Не уверен , но быть может без end обойтись?

If you need to get a reference on the first or last element of an array, use these functions because reset() and end() only return you a copy that you cannot dereference directly:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php 
function first(&$array) { 
if (!is_array($array)) return &$array; 
if (!count($array)) return null; 
reset($array); 
return &$array[key($array)]; 
} 
 
function last(&$array) { 
if (!is_array($array)) return &$array; 
if (!count($array)) return null; 
end($array); 
return &$array[key($array)]; 
} 
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2019, 08:36
Помогаю со студенческими работами здесь

Поиск по массиву
как сделать поиск по массиву чтобы к примеру выбирало элементы которые определенно заканчивались? ( к примеру массив слов и выбирало все...

Поиск по массиву
Добрый день. Нужна помощь. Допустим, у нас есть такой вот массив: $mass = array('1'= 'грустный', '2' = 'нормальный', '3' =...

Поиск по массиву
Всем привет. Помогите справиться с задачей. Есть два массива. 1. Массив $category содержит множество наименований категорий с id 2....

Поиск по массиву
Задание:Описать массив расписание, содержащий день недели; количество пар в этот день; время начала и конца пары; название...

Поиск по массиву
Можете подсказать как реализовать, функцию, которая будет искать все значения по ключу в массиве. Массив. Пример №1. $array = array(...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru