RainMEN
@RainMEN
HTML/STYLUS/JADE/JS/Laravel/Joomla/DLE и т.д.

PHP как сделать вывод объекта по категориям?

Добрый день!

Сильно помидорами не кидайте, я не специалист в php, поэтому Вас и спрашиваю.

В общем есть объект $media_this_archive типа:

array(10) {
  [0]=>
  object(stdClass)#203 (5) {
    ["id"]=>
    string(2) "98"
    ["name"]=>
    string(115) "Кафедральный собор во имя Казанской иконы Божией Матери в Чите"
    ["src"]=>
    string(116) ""
    ["category_id"]=>
    string(1) "0"
    ["tip"]=>
    string(1) "1"
  }
  [1]=>
  object(stdClass)#204 (5) {
    ["id"]=>
    string(2) "96"
    ["name"]=>
    string(49) "Дворец Бутиных (ГТРК "Чита")"
    ["src"]=>
    string(116) ""
    ["category_id"]=>
    string(1) "0"
    ["tip"]=>
    string(1) "1"
  }
  [2]=>
  object(stdClass)#205 (5) {
    ["id"]=>
    string(2) "95"
    ["name"]=>
    string(78) "Алханайский национальный парк (ГТРК "Чита")"
    ["src"]=>
    string(116) ""
    ["category_id"]=>
    string(1) "0"
    ["tip"]=>
    string(1) "1"
  }
  [3]=>
  object(stdClass)#206 (5) {
    ["id"]=>
    string(2) "94"
    ["name"]=>
    string(67) "Заповедник Сохондинский (ГТРК "Чита")"
    ["src"]=>
    string(116) ""
    ["category_id"]=>
    string(2) "37"
    ["tip"]=>
    string(1) "1"
  }


Что из него хочется получить вот такое чудо вывод , то есть вверху мы должны видеть список категорий который считываются по category_id, а внизу естественно вывод содержимого каждой категории включая кнопочку все.

Что я сделал:
<ul class="uk-subnav uk-subnav-pill" data-uk-switcher="{connect:'#switcher-content'}">
        <?php foreach ($arrayCategory as $item):?>
            <li><a href="#"><?php echo getCategoryNameForId($item,$category_photo); ?></a></li>
        <?php endforeach?>
    </ul>

    <div id="switcher-content" class="uk-switcher">
        <?php foreach ($arrayCategory as $items):
            $category_items =getArrayForCategoryId($item, $media_this_archive);
        ?>
            <div class="uk-active album">
                <?php foreach($category_items as $item): ?>
                    <?php if ($item->tip == 2):?>
                        <div class="items-image">
                            <a  href="http://zabaikalom.ru/upload/sv/<?php echo $item->src; ?>.jpg" rel="lightbox[maxigallery]" target="_blank" title="<?php echo $item->name; ?>">
                                <img src="http://zabaikalom.ru/upload/sv/<?php echo $item->src; ?>.jpg" width="250" height="200" alt="<?php echo $item->name; ?>" title="Кликните для увеличения" class="photo"><br>
                                <strong><?php echo $item->name; ?></strong>
                            </a>
                            <button value="http://zabaikalom.ru/upload/sv/<?php echo $item->src; ?>.jpg" type="button" onclick="download(); return false;" class="uk-button uk-button-mini uk-button-success"> <i class="uk-icon-arrow-down"></i>   Скачать</button>
                        </div>
                    <?php endif ?>
                    <?php if ($item->tip==1):?>
                        <div class="items-image">
                            <a class="" href="#">
                                <?php echo $item->src ?>
                                <strong><?php echo $item->name; ?></strong>
                            </a>
                        </div>
                    <?php endif ?>
                    <?php if ($item->tip==0):?>
                        <div><a class="items-image" href="#"><?php echo $item->src ?><strong><?php echo $item->name; ?></strong></a></div>
                    <?php endif ?>

                <?php endforeach; ?>
            </div>
        <?php endforeach; ?>
        <pre>
            <?php var_dump($media_this_archive) ?>
            <?php var_dump($arrayCategory) ?>
        </pre>
    </div>


//массив категорий
 $arrayCategory = getArrayCategoryForThisArchive($media_this_archive);
// получаем его так
//Получить все категории в заданном массиве
function getArrayCategoryForThisArchive($media_this_archive){
    $i=0;
    foreach ($media_this_archive as $item){
        $array[$i++] = $item->category_id;
    }
    return array_unique($array);//выводим только уникальные значения
}
//Получить все из архива по ID категории
function getArrayForCategoryId($category_id, $media_this_archive){
    $i=0;
    foreach ($media_this_archive as $item){
        if ($item->category_id === $category_id){
            $array[$i++]=$item;
        }
        else $array = 'Что то не так';
    }
    return $array;
}


и то что я сделал вроде бы работает, но не всегда, а именно с картинками все отлично, хотя может я ошибаюсь а вот с фреймами получаю ошибку : Object of class stdClass could not be converted to string in on line.

Может быть есть другое решение это делать? Может другой алгоритм? Желательно не лазать каждый раз в БД и делать WHERE, а то притормаживает.
  • Вопрос задан
  • 3610 просмотров
Пригласить эксперта
Ответы на вопрос 2
А разве в таких случаях не сразу должен выводиться весь список, а уже с помощью "id="Logo", "id="web" (jQuery) сортироваться?
Ответ написан
В ошибке говорится что вы пытаетесь использовать объект как строку, а так делать нельзя с объектами stdClass.

В ошибке указана строка где она происходит. Но ни здесь ни на сайте не видно в какой строке. Посмотрите что там, и уже отталкивайтесь от полученных данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы