2016-07-23 3 views
0

У меня есть PHP скрипт, который работает очень хорошо, за исключением, что я получаю эту ошибку сообщениеPHP массив как индекс без массива

Undefined index: Array in [...]/exp.php on line 239 

На этой линии есть этот код:

$out_kostenstelle = $kostenstellen[$nextShift["kostenstelle"]][1]. 
    "(".$nextShift["kostenstelle"].")"; 

Я думаю, только часть, где может возникнуть Массив как Индекс, является частью, где $nextShift["kostenstelle"] является индексом для $kostenstellen.

Однако, когда я пытаюсь поймать эту часть (она находится в цикле со многими сто серий, так что я не могу вручную проверить его) с этим кодом, мой сценарий не входит в часть внутри пункта if

if(is_array($nextShift["kostenstelle"])) 
{ 
    echo "<pre>"; 
    var_dump($nextShift); 
    echo "</pre>"; 
    die(); 
} 

Это не имеет никакого смысла для меня, и я много пробовал. безуспешно.

Я думаю, что это может быть достаточно кода, где ошибка может быть, но только в случае, здесь структура $kostenstellen и $nextShift

Kostenstellen:

array(2) { 
    [100]=> 
    array(2) { 
    [0]=> 
    string(3) "100" 
    [1]=> 
    string(11) "Company A" 
    } 
    [200]=> 
    array(2) { 
    [0]=> 
    string(3) "300" 
    [1]=> 
    string(12) "Company B" 
    } 
} 

и nextShift:

array(4) { 
    ["id"]=> 
    string(2) "168" 
    ["start_unix"]=> 
    string(10) "1466780000" 
    ["end_unix"]=> 
    string(10) "1466812400" 
    ["kostenstelle"]=> 
    string(3) "100" 
} 
+0

ли вы разместите ваш 'is_array' проверить только * до * точки отказа? – BeetleJuice

+0

просто сделал это, и он ничего не изменил – JRsz

ответ

1

Нет никакого способа обойти это: проблема в том, что индекс, который вы пытаетесь использовать, сам по себе является массивом.

Когда вы обращаетесь к массиву в php, $array[$index], PHP попытается его укрепить, если он еще не является строкой или цифрой. Строка массива дает литерал "Array"; как у вас здесь.

Однако, есть еще одна возможность: когда вы запускаете цикл, массив был строковой уже. Раньше это было где-то, кто-то бросал его на строку.

Вы можете проверить, если с такой, если:

if(is_array($nextShift["kostenstelle"]) || $nextShift["kostenstelle"] == "Array") 
{ 
    echo "<pre>"; 
    var_dump($nextShift); 
    echo "</pre>"; 
    die(); 
} 
+0

FYI, когда 'array' сравнивается с чем угодно,' array' всегда больше. –

+0

Хорошо, я вижу, поэтому я поставил Array в какой-то момент своих дат, а затем он не запускался, потому что String был Array из-за предыдущего массива. Я неправильно понял ошибку. Это работает, теперь я могу исправить поврежденные данные. Спасибо, сэр :) – JRsz

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