Задачка из массивов на php

O
На сайте с 23.09.2014
Offline
76
741

Помогите решить следующую задачу:

-есть два массива:


$means = array([0]=>'щука',[1]=>'спиннинг');

$bait = array(
'карп' => array(
'удочка' => 'перловка',
'спиннинг' => 'червь',
'сеть' => 'макуха'
),
'щука' => array(
'спиннинг' => 'блесна',
'жерлица' => 'живец'
),
'окунь' => array(
'спиннинг' => 'блесна'
),
'карась' => array(
'спиннинг' => 'червь',
'удочка' => 'манка',
'закидушка' => 'опарыш'
)

);

1. Нужно в зависимости от первого массива $means найти во втором массиве $bait и записать в отдельную переменную например $lure название соответствующей наживки для ловли рыбы.

2. Если во втором массиве $bait отсутствует запись вид рыбы или вид снасти которые подаются из первого массива $means, тогда переменной $lure пристраивается строка "Нет данных"

P.S Первый массив не правильно отобразился выше, поэтому делаю копию тут $means = array([0]=>'щука',[1]=>'спиннинг'); или $means = array([0]=>'карась',[1]=>'закидушка');

[umka]
На сайте с 25.05.2008
Offline
456
#1

$lure=$bait[$means[0]][$means[1]];

if (!$lure) { $lure="Нет данных"; }
Лог в помощь!
O
На сайте с 23.09.2014
Offline
76
#2

а если заранее не известно количество элементов массива $means (может быть 1 или 4), тогда как решить?

siv1987
На сайте с 02.04.2009
Offline
427
#3

foreach

а вообще должно быть известно, либо меняйте логику скрипта.

[umka]
На сайте с 25.05.2008
Offline
456
#4
Osavul:
а если заранее не известно количество элементов массива $means (может быть 1 или 4)

Это как?

Сейчас два — это понятно.

0. Какая рыба

1. На что ловим

O
На сайте с 23.09.2014
Offline
76
#5
'[umka:
;13470681']Это как?
Сейчас два — это понятно.
0. Какая рыба
1. На что ловим

Ну например:

0. рыба окунь

1. наживка червь

2. вид наживки - белый или красный

соответствен и во 2 массиве может быть дополнительная запись

[umka]
На сайте с 25.05.2008
Offline
456
#6
Osavul:
Ну например:
0. рыба окунь
1. наживка червь
2. вид наживки - белый или красный

соответствен и во 2 массиве может быть дополнительная запись

Ааа... ну так нам-то нужны только 0 и 1. А они, вроде как, остаются на месте? :)

Не. Стоп. Элемент №1 не всегда снасть?

Если не всегда, то это уже задача для кода, который формирует этот массив.

В данном случае у вас наживка уже известна и шарить по массиву $bait нет смысла.

O
На сайте с 23.09.2014
Offline
76
#7

А вообще это я не удачный пример на ловли рыбы сделал.

В реальности у меня другой скрипт. Делаю класс маршрутизации для cms.

Первый массив это данные введенной в адресную строку пути или нажатая ссылка пользователем. То есть количество элементов этого массива постоянно меняется:



$url = $_SERVER['REQUEST_URI'];

private function analyze($url)
{
//массив из элементов урл
$adds = parse_url($url);
//преобразования массива в строку
$path_st = strval($adds['path']);
//удаление слешей в начале и конце строки
$path_st = trim($path_st, '/\//');
//новый массив с элементов разделенными слешами
$path = preg_split('/\//', $path_st);

return $path;
}

Это 1 полученный массив мне нужно сравнить с правилами записными в 2 массив и в зависимости от этого подключить нужный модуль :

//Настройки правил маршрутизации
private function options()
{
$opt = array(
'user' => array(
'user' => 'UserView',
'register' => 'RegisterView',
'login' => 'UserView'
),
'bd_query' => array(
'url' => 'name_table'
)
);

return $opt;
}
totamon
На сайте с 12.05.2007
Offline
437
#8
Osavul:
Это 1 полученный массив мне нужно сравнить с правилами записными в 2 массив и в зависимости от этого подключить нужный модуль :

у вас должно быть больше контроля над 1 массивом, почему количество может меняться? если там 3 элемента из адресной строки то 3 модуля подключать будете?

если реализация алгоритма вызывает трудности, значит он не правильный...

тогда уж приведите пример УРЛов рабочих.

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
O
На сайте с 23.09.2014
Offline
76
#9
totamon:
тогда уж приведите пример УРЛов рабочих.

ну вот например урлы:

site.loc/user/register - подключится модуль регистрации пользователя RegisterView.php

site.loc/user/login - авторизация пользователя , подключается модуль UserView.php

---------- Добавлено 01.02.2015 в 21:03 ----------

totamon:
почему количество может меняться? если там 3 элемента из адресной строки то 3 модуля подключать будете?

дальше планирую сравнивать урл с взяты с базы данных таблиц категорий и т.д- там будут урл разной вложенности например: site.loc/категория/подкатегория1/подкатегория2/статья.html

Но для начала хотя бы разобраться с простыми статическими предопределенными урл. -site.loc/user/register или site.loc/user/login

---------- Добавлено 01.02.2015 в 21:09 ----------

то есть логика такая: пользователь ввел урл. Это адрес разбивается на части и формируется массив. Этот массив сравнивается с массивом правил и если тут есть это адрес тогда подключается соответствующий модуль. если нет такого прописного правила(маршрута) тогда подключение модкля вывода страницы 404

totamon
На сайте с 12.05.2007
Offline
437
#10

код от [umka] решает вашу задачу... если элемент не найден то делаете остальные проверки на категории и тд.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий