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
Форумы портала PHP.SU :: Версия для печати :: Проблема с выводом из массива
Форумы портала PHP.SU » PHP » Программирование на PHP » Проблема с выводом из массива

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

1. madcat - 16 Сентября, 2009 - 10:48:22 - перейти к сообщению
Добрый день уважаемые пользователи и админы данного ресурса. Немогу решить одну довольно не сложную задачку. Все действия происходят в цикле 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 Недовольство, огорчение Погомите пожалуйста, заранее спасибо!
2. Champion - 16 Сентября, 2009 - 10:55:21 - перейти к сообщению
не совсем понял, но in_array должен помочь
3. madcat - 16 Сентября, 2009 - 11:02:03 - перейти к сообщению
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.
4. Champion - 16 Сентября, 2009 - 11:11:44 - перейти к сообщению
ты им не правильно воспользовался. Я так понял, что тебе надо каждый элемент массива проверить на наличие в сесси.
5. madcat - 16 Сентября, 2009 - 11:14:49 - перейти к сообщению
да, именно так!
6. Viper - 16 Сентября, 2009 - 11:17:14 - перейти к сообщению
7. madcat - 16 Сентября, 2009 - 11:22:38 - перейти к сообщению
Viper пишет:

так не подходит
8. Champion - 16 Сентября, 2009 - 11:22:52 - перейти к сообщению
Viper, что-то ты не подумал. madcat Ты не правильно воспользовался функцией. Всё. Воспользуйся правильно.
9. madcat - 16 Сентября, 2009 - 15:08:05 - перейти к сообщению
Блин парни подскажите пожалуйста.. я уже неделю мудохаюсь : ((

Я так понял вы предлагает такой вариант:
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 ...
10. Stierus - 16 Сентября, 2009 - 16:11:18 - перейти к сообщению
Цитата:
Вобщем такой вот код.. но вот дело в том что массив может состоять так
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' с массивами, что ещё более бесполезно Улыбка
11. madcat - 16 Сентября, 2009 - 17:14:06 - перейти к сообщению
массив получается типа такого
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.  
12. Stierus - 16 Сентября, 2009 - 17:27:33 - перейти к сообщению
давай так :

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. ?>
13. madcat - 16 Сентября, 2009 - 17:45:36 - перейти к сообщению
вот пример моего кода с 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.  
14. Stierus - 16 Сентября, 2009 - 17:50:14 - перейти к сообщению
1 Запусти мой скрипт
2 Разберись, что делают in_array, count, foreach
15. JustUserR - 16 Сентября, 2009 - 20:41:00 - перейти к сообщению
madcat пишет:
Если такой то он не подходит, т.к. все дивы у меня выходят block ...
Оператор foreach поргоняет все элементы массива а функция in_array проверят есть ли элемент в массиве - само собой разумеется что всегда будет возвращаться true (За исключение мистических случаев Улыбка У вас чтоо с логикой не то - надо один раз проверять

 

Powered by ExBB FM 1.0 RC1