php : выберите столбец в массиве с ошибкой неопределенного индекса

#php #arrays

#php #массивы

Вопрос:

Я хочу получить столбец в PHP-массиве $slider это :

         array(6) {
  [0]=>
  array(1) {
    ["image"]=>
    string(32) "themes/public/slideshow/ads1.jpg"
  }
  [1]=>
  array(1) {
    ["title1"]=>
    string(1) "."
  }
  [2]=>
  array(1) {
    ["image"]=>
    string(32) "themes/public/slideshow/ads2.jpg"
  }
  [3]=>
  array(1) {
    ["title1"]=>
    string(1) "."
  }
  [4]=>
  array(1) {
    ["image"]=>
    string(32) "themes/public/slideshow/ads3.jpg"
  }
  [5]=>
  array(1) {
    ["title1"]=>
    string(1) "."
  }
}
  

когда я хочу получить столбец этого массива, php выдает ошибку Undefined index !
эта ошибка существует на сервере, но не существует на localhost!

     foreach ($slider as $slide)
    {

        $s = $slide['image'];

        ?>


        <div>
            <img u="image" src2="<?php echo $url . "/$s" ?> " />
        </div>

        <?php

    }

    ?>
  

Неопределенный индекс: изображение в этой строке: $s = $slide[‘изображение’];

Комментарии:

1. <img src2> ??? это не сработает; удалите 2 , и что u= должно представлять?

2. @NikhilVaghela Неопределенное смещение: 6 в -> foreach ($ slider[6] как $ slide)

3. @Fred-ii- !синтаксис правильный !

Ответ №1:

Вы должны использовать isset , чтобы проверить, существует ли данный ключ

 $slider = array (
    array (
    'image' => "themes/public/slideshow/ads1.jpg"
),
    array (
    'title1'=>"."
),
    array (
    'image'=>"themes/public/slideshow/ads2.jpg"
),
    array (
    'title1'=>"."
),
    array (
    'image'=>"themes/public/slideshow/ads3.jpg"
),
    array (
    'title1'=>"."
),
);

$url = 'http://example.com';
foreach ($slider as $slide)
{
    if (isset($slide['image'])) {
        $s = $slide['image'];
        echo $url . '/' . $s . '<br />';
    }
}
  

ДЕМОНСТРАЦИЯ

Ответ №2:

Ошибка, которую вы получаете, довольно нормальная, из-за того, как вы $slider построены!

Когда вы это делаете, foreach ($slider as $slide) вы получаете последовательные $slide элементы, которые альтернативно содержат image или title1 : другими словами, один из двух элементов не содержит того image индекса, который вы ищете.

Фактически, вот как вы должны построить свой массив:

 array(6) {
  [0]=>
  array(2) {
    ["image"]=>
    string(32) "themes/public/slideshow/ads1.jpg"
    ["title1"]=>
    string(1) "."
  }
  [1]=>
  array(2) {
    ["image"]=>
    string(32) "themes/public/slideshow/ads2.jpg"
    ["title1"]=>
    string(1) "."
  }
  [2]=>
  array(2) {
    ["image"]=>
    string(32) "themes/public/slideshow/ads3.jpg"
    ["title1"]=>
    string(1) "."
  }
}
  

Затем вы можете работать так, как ожидали…

Ответ №3:

Ваш массив содержит другие массивы, каждый из ваших массивов содержит одну строку. Но индексы всех этих подмассивов не совпадают. Иногда это так image , иногда это так title1 . но в вашем коде вы используете только image ключ в строке, $s = $slide['image']; даже если это title1 один…

Поэтому проверьте, существует ли ключ, прежде чем использовать его :

 if (array_key_exists('image', $slide) {
    $s = $slide['image'];
    ?>
    <div>
        <img u="image" src2="<?php echo $url . "/$s" ?> " />
    </div>
    <?php
}