Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

Добрый день! Подскажите пожалуйста, как частично вывести многомерный массив на экран.
Есть такой код:
Код:

<?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 в 11:13.
Javany вне форума   Ответить с цитированием
Старый 15.05.2018, 11:27   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,289
Репутация: 2073

icq: 216409213
По умолчанию

Код:

'Yahoo' =>[
  Yahoo' => ['http://yahoo.com', false, true]
]

__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 15.05.2018, 11:59   #3
Javany
Форумчанин
 
Регистрация: 15.05.2018
Сообщений: 75
Репутация: 129
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:

'Yahoo' =>[
  Yahoo' => ['http://yahoo.com', false, true]
]

Спасибо, но массив менять нельзя.
Javany вне форума   Ответить с цитированием
Старый 15.05.2018, 12:18   #4
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,290
Репутация: 1064
По умолчанию

Цитата:
Сообщение от 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, 13:28   #5
Javany
Форумчанин
 
Регистрация: 15.05.2018
Сообщений: 75
Репутация: 129
По умолчанию

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

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

Цитата:
Сообщение от 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, 16:24   #7
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,290
Репутация: 1064
По умолчанию

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


15:08.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru