Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2018, 10:11   #1
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию Частичный вывод многомерного массива

Добрый день! Подскажите пожалуйста, как частично вывести многомерный массив на экран.
Есть такой код:
Код:
<?php
  $links = [
    'Google' => [
        'Mail' => ['http://gmail.com', true, true],
        'Adwords' => ['http://google.com/adwords', true, false],
        'Adsense' => ['http://google.com/adwords', false, true]
    ],
    'Яндекс' => [
        'Метрика' => ['http://metrika.yandex.ru', false, false],
        'Direct' => ['http://direct.yandex.ru', true, true]
    ],
    'Yahoo' => ['http://yahoo.com', false, true]
];
echo "<ul>";
    foreach ($links as $company => $servise)
    {
    echo '<li>';
        echo $company;
echo "<ul>";
    foreach ($servise as $text => $link)
        {  
        echo  '<li> <a href= " '. $link[0] . '"> '.$text.'</a> </li>';
        }
echo "</ul>";
    echo '</li>';  
    }
echo "</ul>";
     ?>
После перебора циклом есть такой результат:

Google
- Mail
- Adwords
- Adsense
Яндекс
- Метрика
- Direct
Yahoo
- 0
- 1
- 2
Но Yahoo это тоже массив, 0 ,1 и 2 не нужны на экране. Вместо false и true в ссылку нужно записать атрибуты target="_blank" и rel="nofollow, поэтому false и true тоже в массиве. Подскажите как решить этот вопрос. Спасибо.
Не задавай вопрос, если не знаешь что делать с ответом...

Последний раз редактировалось Javany; 15.05.2018 в 10:13.
Javany вне форума Ответить с цитированием
Старый 15.05.2018, 10:27   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Код:
'Yahoo' =>[
  Yahoo' => ['http://yahoo.com', false, true]
]
p51x на форуме Ответить с цитированием
Старый 15.05.2018, 10:59   #3
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
'Yahoo' =>[
  Yahoo' => ['http://yahoo.com', false, true]
]
Спасибо, но массив менять нельзя.
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Старый 15.05.2018, 11:18   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Javany Посмотреть сообщение
Но Yahoo это тоже массив, 0 ,1 и 2 не нужны на экране.
Проверяй переменную $text при помощи is_numeric: если это число – то на экран ничего не выводи.

Цитата:
Сообщение от Javany Посмотреть сообщение
Вместо false и true в ссылку нужно записать атрибуты target="_blank" и rel="nofollow, поэтому false и true тоже в массиве.
Ну здесь и подсказывать нечего: проверяй значения переменных $link[1] и $link[2] – и в зависимости от их значений либо добавляй в ссылку соответствующие атрибуты, либо нет.
Andkorol вне форума Ответить с цитированием
Старый 15.05.2018, 12:28   #5
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Проверяй переменную $text при помощи is_numeric: если это число – то на экран ничего не выводи.

Ну здесь и подсказывать нечего: проверяй значения переменных $link[1] и $link[2] – и в зависимости от их значений либо добавляй в ссылку соответствующие атрибуты, либо нет.
Спасибо! Проверил на число, добавил условную конструкцию, отработал код. Буду разбираться дальше. Это мои первые шаги в PHP.))
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Старый 15.05.2018, 14:52   #6
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Проверяй переменную $text при помощи is_numeric: если это число – то на экран ничего не выводи.

Ну здесь и подсказывать нечего: проверяй значения переменных $link[1] и $link[2] – и в зависимости от их значений либо добавляй в ссылку соответствующие атрибуты, либо нет.
Я нашел немного другой способ. Жду конструктивной критики.

Код:
	$links = [
	'Google' => [
		'Mail' => ['http://gmail.com', true, true],
		'Adwords' => ['http://google.com/adwords', true, false],
		'Adsense' => ['http://google.com/adwords', false, true]
	],
	'Яндекс' => [
		'Метрика' => ['http://metrika.yandex.ru', false, false],
		'Direct' => ['http://direct.yandex.ru', true, true]
	],
	'Yahoo' => ['http://yahoo.com', false, true]
];
   
	end($links);// забираем последний ключ из первого массива
	$YahooKey = key($links);//записываем ключ в переменную

	$Yahoo = array_pop($links);//забираем последний элемент массива в переменную, после чего удаляем.

echo "<ul>";
	foreach ($links as $company => $servise)//перебираем первый массив
	{
echo '<li>';
		echo $company;// выводим на экран 
echo "<ul>"; 

	foreach ($servise as $text => $link)// перебираем вложенный массив
	{
	if($link[1] == 1){//проверяем массив true
	$atr = '"target="_blank"'; //добавляем атрибут в переменную
}

	else{$atr ='';}// иначе пустая строка

	if($link[2] == 1){//проверяем массив true
	$atr1 = 'rel="nofollow"';//добавляем атрибут в переменную
}
	else{$atr1 ='';}// иначе пустая строка

echo  '<li> <a href= "'.$link[0].' '  . $atr.' '. $atr1.'"> '.$text.'</a> </li>';
		}

echo "</ul>";

echo '</li>';	
	}
echo  '<li> <a href= "'.$Yahoo[0].' '  . $atr.' '. $atr1.'"> '.$YahooKey.'</a> </li>';

echo "</ul>";

	 ?>
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Старый 15.05.2018, 15:24   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

А если массив, подобный Yahoo, будет не последним, или он такой будет не один, или вообще такого массива не будет?
Нужно делать универсальные решения – а не кривые хардкодные костыли.

Последний раз редактировалось Andkorol; 15.05.2018 в 15:27.
Andkorol вне форума Ответить с цитированием
Старый 15.05.2018, 15:36   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Полностью согласен с Andkorol.

Как только ваш yahoo переставят в начало или в середину или добавят ещё одну запись в массив, как тут же всё рухнет.
Это криво и не универсально.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2018, 07:23   #9
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Спасибо! Учту.
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Старый 17.05.2018, 07:51   #10
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Спасибо, но массив менять нельзя.
Бред подстраиваться под не правильную и не продуманную структуру. Сначала нужно продумать задачу и составить массив таким образом чтобы он соотвествовал вашим требованиям и при возможности мог масштабироваться. А то сделают массив или структуру корявую а потом подстраивают свой код по это.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод многомерного масива Silentium.noxe Общие вопросы C/C++ 14 02.03.2017 16:52
Сортировка многомерного массива KuckaMAXHATKA PHP 1 12.06.2014 19:24
Длина многомерного массива Johnson Общие вопросы Delphi 2 18.02.2011 08:25
Частичный вывод текста MrJenika PHP 6 02.04.2010 10:28
Работа с Printer. Частичный вывод листа из принтера. Izhic Общие вопросы Delphi 6 15.10.2008 08:57