Ссылка на полное изображение, отображаемое из многомерного массива - PullRequest
0 голосов
/ 02 ноября 2018

Haloo, я много раз пытался отобразить большие изображения (большие $) из многомерного массива (моей БД). Решение близко, но я его не нашел.
Я уверен, что проблема следующие коды из home.php :

 <?php foreach ($product['images']['big'] as $big): ?>
     <a href="<?php echo $big ?>">
         <?php endforeach; ?>

Я очень благодарен, если бы вы могли мне помочь. Спасибо.

products.php:

return [
    [
        'slug' => 'red-t-shirt',
        'name' => 'Red t-shirt',
        'price' => 'Euro 8',
        'size' => 'X',
        'images' => [
            'small' => [
                'photo/small_photos/1/pic1.jpg',
                'photo/small_photos/1/pic2.jpg',
            ],
            'thumg' => [
                'photo/small_photos/1/pic1.jpg',
                'photo/small_photos/1/pic2.jpg'
            ],
            'big' => [ 
            'photo/big_photos/2/pic11.jpg',
            'photo/big_photos/2/pic22.jpg',
            ],
        ],
    ],

];

Вот Home.php:

<div class="card-deck">
    <?php foreach ($products as $product): ?>

     <?php foreach($product['images']['small'] as $image ): ?>

       <?php foreach ($product['images']['big'] as $big): ?>
     <a href="<?php echo $big ?>">
         <?php endforeach; ?>
     <img src="<?php echo $image ?>">
     </a>
     <?php endforeach; ?>
      <?php echo'<li>' .$product['name'] . '<br>' . 'Size:' . $product['size'] . '<br/>' . 'Rate:' . $product['price']
            . '</li>'
            ?>
<?php endforeach; ?>
</div>

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Во-первых, я бы лучше сделал отступ для вашего кода при вложении циклов. Делает это намного проще для чтения.

Что вы можете сделать, предполагая одинаковое количество элементов под большим, маленьким, большим пальцем ...

<div class="card-deck">

    <?php foreach ($products as $product): ?>
        <li><?= $product['name'] ?><br>Size: <?= $product['size'] ?><br/>Rate: <?= $product['price'] ?></li>
        <?php foreach ($product['images']['big'] as $offset => $bigUrl): ?>
            <a href="<?= $bigUrl ?>"><img src="<?= $product['images']['small'][$offset] ?>" /></a>
        <?php endforeach; ?>
    <?php endforeach; ?>

</div>

Эти элементы имеют ключи, в данном случае числовые индексы. Используя один цикл над изображениями, используйте это общее значение смещения для получения других значений.

0 голосов
/ 02 ноября 2018

Предполагая, что элементы в каждом из массивов изображений соответствуют напрямую, вы можете использовать ключ из одного массива для ссылки на соответствующее значение в другом.

<?php foreach($product['images']['small'] as $key => $image ): ?>
    <a href="<?php echo $product['images']['big'][$key] ?>">
        <img src="<?php echo $image ?>">
    </a>
<?php endforeach; ?>

Я думаю, что было бы проще, если бы вы могли изменить products.php, чтобы вместо этого возвращать такие данные:

'images' => [
    ['small' => 'photo/small_photos/1/pic1.jpg',
     'thumg' => 'photo/small_photos/1/pic1.jpg',
     'big' => 'photo/big_photos/2/pic11.jpg',
    ],
    ['small' => 'photo/small_photos/1/pic2.jpg',
     'thumg' => 'photo/small_photos/1/pic2.jpg',
     'big' => 'photo/big_photos/2/pic22.jpg'
    ],
],

Это позволит вам выводить значения более аккуратно:

<?php foreach($product['images'] as $image ): ?>
    <a href="<?php echo $image['big'] ?>">
        <img src="<?php echo $image['small'] ?>">
    </a>
<?php endforeach; ?>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...