2016-09-09 5 views
-1

У меня есть любопытное поведение, которое я не могу объяснить. Я цикл массив с foreach для создания другого выхода массива из его значений:Примечание: Неопределенное смещение: 1 при создании массива-элемента?

$tabCount = 0; 
$mainDivs = array(); 

foreach($output as $node) { 
    $tabCount++; 
    $mainDivs[$tabCount] .= 'blablabla'; 
} 

выход есть, и кажется правильным (ничего отсутствует). Но PHP бросает мне уведомление:

Примечание: Undefined смещение: 1 в E: \ XAMPP \ HTDOCS \ WP \ сор-контента \ Plugins \ тест \ PHP \ test.php в строке 163

line 163 - это линия, где я делаю $mainDivs[$tabCount] .= 'blablabla';

Как это может быть? Я имею в виду, я создаю элемент массива (?)

+1

'Еогеасп ($ выводится в виде $ узла) { $ mainDivs [$ tabCount] = 'блаблабла'; $ tabCount ++; } 'remove' .' и поместите' $ tabCount ++; 'после назначения –

+2

нет необходимости в этом'. = ' – devpro

+1

' .' используется для конкатенации не для назначения массива –

ответ

1

. используется для конкатенации не для массива assignment.So удалить его

Поэтому код должен быть: -

$tabCount = 0; 
$mainDivs = array(); 
if(isset($output) && count($output)>0){ // Check that your array is set and have values so that foreach will not produce error 
    foreach($output as $node) { 
     $mainDivs[$tabCount] = 'blablabla'; 
     $tabCount++; 
    } 
} 

Примечание: -

Ссылка: -

String конкатенация: - http://php.net/manual/en/language.operators.string.php

Массив: - http://php.net/manual/en/language.types.array.php

+1

рад помочь вам хрустящим. :) :) :) –

1

Уведомление вызвано из-за оператора добавления строки .=. Так что PHP будет читать $mainDivs[$tabCount] перед записью новой строки в массив. Это чтение вызывает уведомление

Пожалуйста, попробуйте

$mainDivs[$tabCount] = 'blablabla'; 

вместо

$mainDivs[$tabCount] .= 'blablabla'; 

если это не neseccary, чтобы добавить строку blablabla.

1

1) Вы получаете PHPnotice, потому что вы пытаетесь получить доступ к arrayindex, который не является set. Сначала попробуйте проверить $output массив имеет значение или нет

попытаться проверить print_r($output);

2) Не используйте . при назначении arrayvalue

Просто

$mainDivs[$tabCount] = 'blablabla'; 

Есть ниже способов создания arrays :

index могут быть назначены автоматически (индекс всегда начинается с 0), как это:

$cars = array("Volvo", "BMW", "Toyota"); 

или

$cars[] = "Volvo"; 
$cars[] = "BMW"; 
$cars[] = "Toyota"; 

или индекс может быть назначен вручную:

$cars[0] = "Volvo"; 
$cars[1] = "BMW"; 
$cars[2] = "Toyota"; 
1

удалить точку (.), если ваша точка использования означает его действие как конкатенатное.

1) ваша попытка отменить значение, с которым не установлено раньше, поэтому вы должны использовать = удалить это cancatenate.

$mainDivs[$tabCount] .= 'blablabla'; 

изменение

$mainDivs[] = 'blablabla'; 

вам не нужно индексации. он автоматически индексирует сам по себе, а также запускается только с нуля.

$mainDivs = array(); 

foreach($output as $node) { 

    $mainDivs[] = 'blablabla'; 

} 
1

Нет необходимости использовать конкатенацию присваивание массива.

Это:

$mainDivs[$tabCount] .= 'blablabla'; 

Должно быть:

$mainDivs[$tabCount] = 'blablabla'; 

Еще одно предложение, прежде чем использовать foreach() чек либо массив count > 0 или нет.

Пример:

<?php 

$tabCount = 0; 
$mainDivs = array(); 

if(count($output) > 0){ // check the count 
    foreach($output as $node) { 
    $tabCount++; 
    $mainDivs[$tabCount] = 'blablabla';   
    } 
} 

?> 

 Смежные вопросы

  • Нет связанных вопросов^_^