Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с выводом из массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: прошу помощи
madcat
Отправлено: 16 Сентября, 2009 - 10:48:22
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Добрый день уважаемые пользователи и админы данного ресурса. Немогу решить одну довольно не сложную задачку. Все действия происходят в цикле foreach, так же у меня есть массив с данным и сессия с данными. Теперь мне нада поставить правельное условие чтобы если данные из сессии == данными из массива то переменная $a (например) будет равна 'block'. ( $a = 'block' )
CODE (text):
скопировать код в буфер обмена
  1.  
  2. ...
  3. while($row = mysql_fetch_object($result))
  4. {
  5. $arr[] = $row-> names; // Создаем массив
  6. }
  7.  
  8. foreach($key as $val) // Цикл
  9. {
  10.  
  11.  $ses = $_SESSION["val"]; // Наша сессия с данными
  12.  for($i=0; $i<count($arr); $i++)
  13.  {
  14.   if($arr[$i] == $ses){
  15.    $a = 'block';
  16.   }
  17.   else
  18.   {
  19.    $a = 'none';
  20.   }
  21.  }
  22.  echo '<div style="display:'. $a .'">';
  23.  
  24. }
  25.  

Вобщем такой вот код.. но вот дело в том что массив может состоять так
Apple Banana Orange
Apple Orange
Orange
А наша сессия равняется Banana, тоесть самый верхний div должен быть block. А он none Недовольство, огорчение Погомите пожалуйста, заранее спасибо!

(Отредактировано автором: 16 Сентября, 2009 - 10:48:43)

 
 Top
Champion Супермодератор
Отправлено: 16 Сентября, 2009 - 10:55:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




не совсем понял, но in_array должен помочь
 
 Top
madcat
Отправлено: 16 Сентября, 2009 - 11:02:03
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




in_array не помог Недовольство, огорчение
Вот я покажу визуально. Вот у меня выводится из цикла форич 3 дива например:
CODE (text):
скопировать код в буфер обмена
  1. <div style="dispaly:none;">
  2. Apple Orange Banana
  3. </div>
  4. <div style="dispaly:none;">
  5. Apple Orange
  6. </div>
  7. <div style="dispaly:none;">
  8. Apple
  9. </div>

В массиве у нас есть например Banana. Теперь как сделать правельное условие чтобы див в котором есть Banana стал dispaly:block.
 
 Top
Champion Супермодератор
Отправлено: 16 Сентября, 2009 - 11:11:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




ты им не правильно воспользовался. Я так понял, что тебе надо каждый элемент массива проверить на наличие в сесси.
 
 Top
madcat
Отправлено: 16 Сентября, 2009 - 11:14:49
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




да, именно так!
 
 Top
Viper
Отправлено: 16 Сентября, 2009 - 11:17:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)






-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
madcat
Отправлено: 16 Сентября, 2009 - 11:22:38
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Viper пишет:

так не подходит
 
 Top
Champion Супермодератор
Отправлено: 16 Сентября, 2009 - 11:22:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Viper, что-то ты не подумал. madcat Ты не правильно воспользовался функцией. Всё. Воспользуйся правильно.
 
 Top
madcat
Отправлено: 16 Сентября, 2009 - 15:08:05
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Блин парни подскажите пожалуйста.. я уже неделю мудохаюсь : ((

Я так понял вы предлагает такой вариант:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($key as $val)
  3. {
  4. if(in_array($ses, $array))
  5. {
  6. $div = '<div style="display:block;">';
  7. }
  8. else
  9. {
  10. $div = '<div style="dispaly:none;">';
  11. }
  12.  
  13. echo $div;
  14. }
  15.  

Если такой то он не подходит, т.к. все дивы у меня выходят block ...

(Отредактировано автором: 16 Сентября, 2009 - 16:06:41)

 
 Top
Stierus Супермодератор
Отправлено: 16 Сентября, 2009 - 16:11:18
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
Вобщем такой вот код.. но вот дело в том что массив может состоять так
Apple Banana Orange
Apple Orange
Orange

давай на этом ключевом моменте уточним Улыбка :
это ты имеешь ввиду массив:
PHP:
скопировать код в буфер обмена
  1. $array = array('Apple Banana Orange', 'Apple Orange', 'Orange');

или
PHP:
скопировать код в буфер обмена
  1. $array = array(array('Apple', 'Banana', 'Orange'), array('Apple', 'Orange'), array('Orange'));

?
В зависимости от ответа :
1 Вариант ты сравниваешь строку 'Banana' с строками 'Apple Banana Orange', 'Apple Orange', 'Orange', ес-но, ни одна из них не совпадает.
2 Вариант ты сравниваешь строку 'Banana' с массивами, что ещё более бесполезно Улыбка
 
My status
 Top
madcat
Отправлено: 16 Сентября, 2009 - 17:14:06
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




массив получается типа такого
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr = array('orange','banana','apple' ....);
  3.  

я уже пробовал такой вот путь
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = "SELECT * FROM arr";
  3. $result = mysql_query($query);
  4. while($row = mysql_fetch_object($result))
  5. {
  6.         $elems[] = $row-> elem;
  7. }
  8. $a = 'apple';
  9. foreach($elems as $el)
  10. {
  11.         if(in_array($a, $elems))
  12.         {
  13.                 $div = 'block';
  14.         }
  15.         else
  16.         {
  17.                 $div = 'none';
  18.         }
  19.         echo '<div style="display:'. $div .'">'. $el .'</div>';
  20. }
  21.  
 
 Top
Stierus Супермодератор
Отправлено: 16 Сентября, 2009 - 17:27:33
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




давай так :

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $query = "SELECT * FROM arr";
  3. $result = mysql_query($query);
  4. $elems = array();
  5. while($row = mysql_fetch_object($result)){
  6.         $elems[] = $row-> elem;
  7. }
  8. $a = 'apple';
  9. echo 'пытаемся найти строку "'.$a.'" в массиве: <br/><pre>';
  10. var_export($elems);
  11. echo '</pre><br/>Вот что вышло: <br/>';
  12. if(in_array($a, $elems) === false){
  13.         echo 'не нашел<br/>';
  14. }
  15. else{
  16.         echo 'нашел<br/>';
  17. }
  18. echo'<br/><br/>=============================================<br/>Способ №2 :<br/>';
  19. foreach($elems as $elem){
  20.         if($elem == $a){
  21.                 echo $a.' совпадает с '.$elem.'<br/>';
  22.         }
  23.         else{
  24.                 echo $a.' не совпадает с '.$elem.'<br/>';
  25.         }
  26. }
  27. ?>

(Отредактировано автором: 16 Сентября, 2009 - 17:30:01)

 
My status
 Top
madcat
Отправлено: 16 Сентября, 2009 - 17:45:36
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




вот пример моего кода с in_array но опять же не выходит : (
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = 'apple';
  3. foreach($key as $val)
  4. {
  5.         if(count(in_array($a, $elems)) == 1)
  6.         {
  7.                 $div = '<div style="display:block;">'. $el .'</div>';
  8.         }
  9.         else
  10.         {
  11.                 $div = '<div style="display:none;">'. $el .'</div>';
  12.         }
  13.        
  14. echo $div;
  15. }
  16.  
 
 Top
Stierus Супермодератор
Отправлено: 16 Сентября, 2009 - 17:50:14
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




1 Запусти мой скрипт
2 Разберись, что делают in_array, count, foreach
 
My status
 Top
JustUserR
Отправлено: 16 Сентября, 2009 - 20:41:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




madcat пишет:
Если такой то он не подходит, т.к. все дивы у меня выходят block ...
Оператор foreach поргоняет все элементы массива а функция in_array проверят есть ли элемент в массиве - само собой разумеется что всегда будет возвращаться true (За исключение мистических случаев Улыбка У вас чтоо с логикой не то - надо один раз проверять


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB