За последние 24 часа нас посетили 20819 программистов и 1140 роботов. Сейчас ищут 634 программиста ...

Некорректная проверка массива

Тема в разделе "PHP для новичков", создана пользователем hardway, 17 мар 2019.

Метки:
  1. hardway

    hardway Новичок

    С нами с:
    12 июн 2018
    Сообщения:
    24
    Симпатии:
    0
    Ситуация следующая: нужно, чтобы последнему элементу из подзаголовка добавлялся CSS-стиль "last", но почему-то, в первом заголовке это не работает, а во втором сработало... Долго искал ошибку в коде, но так и не получилось её найти.

    Код следующий:

    PHP:
    1. $names = $mysqli->query("SELECT `name` FROM `subthemes`");
    2. $names_s = $mysqli->query("SELECT * FROM `sections`");
    3. $arr_names = [];
    4. $arr_names_s = [];
    5. while (($row_1 = $names->fetch_assoc()) != false)
    6.     $arr_names[] = $row_1;
    7. while (($row_2 = $names_s->fetch_assoc()) != false)
    8.     $arr_names_s[] = $row_2;
    9. for ($i = 0; $i < count($arr_names); $i++) {
    10.     $style_2 = false;
    11.     $s_array = $arr_names_s;
    12.     for ($m = 0; $m < count($arr_names_s); $m++) {
    13.         if ($arr_names_s[$m]['subthemes'] != $arr_names[$i]['name']) continue;
    14.         unset($s_array[$m]);
    15.         $f = $m + 1;
    16.         if (isset($s_array[$f])) {
    17.             while ($f < count($s_array)) {
    18.                 if ($s_array[$f]['subthemes'] == $arr_names[$i]['name']) {
    19.                     $k = false;
    20.                     break;
    21.                 }
    22.                 $f++;
    23.             }
    24.         }
    25.         if ($k === true) $style_2 = ' last';
    26.     }
    27. }
    P.S. Это не полный код, а лишь отрывки, отвечающие за CSS-стиль

    Массив arr_names_s имеет следующий вид:

    Код (Text):
    1. Array ( [0] => Array ( [id] => 1 [section] => php_dlya_chaynikov [name] => PHP для чайников [subthemes] => PHP [description] => Данный раздел содержит темы про PHP для чайников ) [1] => Array ( [id] => 2 [section] => php_dlya_guru [name] => PHP для гуру [subthemes] => PHP [description] => Данный раздел содержит темы про PHP для гуру ) [2] => Array ( [id] => 3 [section] => php_i_bazy_dannykh [name] => PHP и базы данных [subthemes] => БАЗЫ ДАННЫХ [description] => Данный раздел содержит темы про работу базы данных ) )
    arr_names:
    Код (Text):
    1. Array ( [0] => Array ( [name] => PHP ) [1] => Array ( [name] => БАЗЫ ДАННЫХ ) )
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    Может, поможет:
    PHP:
    1. function last($a)
    2. {
    3.   static $i=0;
    4.   if (++$i==count($a))
    5.   {
    6.     $i=0;
    7.     return true;
    8.   }
    9.   return false;
    10. }
    Вместо == можно использовать >= для большей надежности.
    --- Добавлено ---
    Еще один пример в лоб:
    PHP:
    1. <?php $i=0; foreach ($page['content'][0] as $id=>$row): ?>
    2.                             <div class="counter<?= ++$i==count($page['content'][0])?' last':'' ?>">
    3.                                 <img src="/images/<?= $id ?>.png" class="counter-icon">
    4.                                 <h3 class="counter-num"><?= $row[0] ?></h3>
    5.                                 <small class="counter-label"><?= $row[1] ?></small>
    6.                             </div>
    7. <?php endforeach; ?>
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @hardway, достать из бд целиком две таблицы и соединить их на уровне php, это настолько неправильно, что я с трудом подбираю слова.