2013-02-15 2 views
0

Я действительно в тупике. У меня есть эта переменная массива $banner_image_description. Когда я печатаю его, я получаю Array (['title'] => dafha ['price'] => adhfadhf).Использование строк в качестве индекса массива PHP

Теперь, что я пытаюсь сделать, это проверить длину значения в «заголовке» и убедитесь, что это больше, чем 2. Поэтому, когда я бегу:

if (isset($this->request->post['banner_image'])) 
    { 
     foreach ($this->request->post['banner_image'] as $banner_image_id => $banner_image) 
     { 
      foreach ($banner_image['banner_image_description'] as $language_id => $banner_image_description) 
      { 
       print_r($banner_image_description); 
       echo('<br/>'); 
       if ((utf8_strlen($banner_image_description['title']) < 2) || (utf8_strlen($banner_image_description['title']) > 64)) 
       { 

        $this->error['banner_image'][$banner_image_id][$language_id] = $this->language->get('error_title'); 
       }     
      } 
     } 
    } 

Я получаю Notice: Undefined index: title и я не знаю, почему. Я думал, что это правильный способ получить значение в «title», и я знаю, что индекс есть, и значение есть.

Я уверен, что массив заселяются Размещая значения формы:

if (isset($this->request->post['banner_image'])) 
{ 
    $banner_images = $this->request->post['banner_image']; 
} 

Вот что значение формы выглядеть следующим образом:

<input type="text" 
name="banner_image[<?php echo $image_row; ?>][banner_image_description][<?php echo $language['language_id']; ?>]['title']" 
value="<?php echo isset(
$banner_image['banner_image_description'][$language['language_id']]['title']) ? 
$banner_image['banner_image_description'][$language['language_id']]['title'] : ''; ?>" /> 
<img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /><br /> 
+0

Является ли это как 'Array ([' название '] => dafha [' цена '] => adhfadhf) 'или' Array (['title'] => 'dafha', ['price'] => 'adhfadhf') '? – fedorqui

+0

Это первый. – Nolski

+0

BUt - это то, как вы его определяете или результат 'print_r ($ var)'? Потому что, если вы определяете его, должно быть так, как я сказал 2-й. – fedorqui

ответ

1

То есть предупреждение, это плохо но ничего не сломает.

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

if (isset($banner_image_description['title']) && (utf8_strlen($banner_image_description['title']) < 2)) 
{ 
    echo 'too short!'; 
} 
+0

Это ничего не отвечает. Тот факт, что он выбрасывает ошибку, означает, что ключ не установлен. Тем не менее, когда я печатаю это, это показывает, что ключ установлен. – Nolski

+0

Учитывая, что вы даже не опубликовали, как был заполнен массив, я должен был предположить. Сообщите, как заполняется этот массив, и я могу помочь вам в дальнейшем. Из-за вашего недостатка в возможностях программирования, почему это происходит. Вы вкладываете foreach друг в друга. Выполнение этих эффектов и делает ваш код неаккуратным. Перепишите его. Также я буду держать пари, что, реализуя мой код выше, он исправит ошибку. – Miverson

+0

Как я уже говорил в предыдущих комментариях, код, предварительно написанный в каркасе OpenCart, и поскольку структура охватывает десятки файлов, я бы предпочел не переписывать половину фреймворка. Я обновлю вопрос, где, по моему мнению, он инициализируется. – Nolski

0

var_dump() показал, что ключ в том числе 'Так, если заявление должно быть установлено в

if ((utf8_strlen($banner_image_description["'title'"]) < 2) || (utf8_strlen($banner_image_description["'title'"]) > 64)) 
Смежные вопросы