2013-08-23 15 views
-1

我有致命的錯誤出現在錯誤日誌中,但由於某種原因,它根本不會影響應用程序。這是正在運行的代碼,它爲什麼會生成PHP錯誤是沒有意義的。致命錯誤:不能使用字符串偏移量作爲數組根本沒有任何意義

for ($i = 1; $i <= $tournament['num_score_fields']; $i++) { 

      $scoresArrayTemp = array(
       'score', 
       'dist', 
       'dateShot', 
       'tens', 
       'nines' 
       ); 

      foreach($scoresArrayTemp AS $val){ 
       if(empty($scores[$i][$val])){ 
        $scores[$i][$val] = ''; 
       } 
      } 
} 

由該行

$scores[$i][$val] = ''; 

任何幫助,將不勝感激感謝產生的錯誤!

基於答案1我改變了代碼如下:

for ($i = 1; $i <= $tournament['num_score_fields']; $i++) { 


      $scoresArrayTemp = array(
       'score'=>'', 
       'dist'=>'', 
       'dateShot'=>'', 
       'tens'=>'', 
       'nines'=>'' 
       ); 

      if(!is_array($scores[$i])){ 
       $scores[$i] = $scoresArrayTemp; 
      } 

      echo $scores[$i]['score']; 
} 

呼應了可變

+0

什麼是$分數?基於錯誤消息的分數似乎是一個字符串?因爲$ string [1]會給你在php – Doon

+0

中的字符串偏移量。$ scores是一個數組,並且始終是一個數組,它會在代碼中進一步處理。 – MadScientist

+0

你是否100%確定它是這個範圍的數組(因爲我們沒有看到所有的代碼)。由於PHP似乎將'$ scores [$ i] [$ val]'解析爲'($ scores [$ i])[$ val]'。它的'$ scores'是一個你會得到的字符串(字符串偏移量)[$ val],錯誤信息是非常有意義的。在循環內嘗試var轉儲$分數並查看它顯示的內容。 – Doon

回答

0

$scores[$i]時仍然得到最後一行的錯誤不是一個數組,所以PHP阻止您在$val處爲索引分配一個值。你可能希望這樣的:

if(is_array($scores[$i]) && empty($scores[$i][$val])){ 
    $scores[$i][$val] = ''; 
} 
+0

更新了有問題的代碼來檢查數組狀態,如果不是數組,然後使它成爲一個,但仍然出現相同的錯誤...奇怪的是,沒有任何破壞,如果我print_r數組是存在的完整結構。 – MadScientist

0

我在你的代碼做了一些改動,以檢查其中的問題是:

<?php 
$tournament['num_score_fields'] = 10; 
for ($i = 1; $i <= $tournament['num_score_fields']; $i++) { 

     $scoresArrayTemp = array(
      'score', 
      'dist', 
      'dateShot', 
      'tens', 
      'nines' 
      ); 

     foreach($scoresArrayTemp AS $val){ 
      if(empty($scores[$i][$val])){ 
       $scores[$i][$val] = ''; 
       echo 'a'; 
      } 
     } 
} 

?> 

輸出是:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 

傢伙有這裏沒有錯誤..這可能是由於任何其他原因。再次從上到下檢查代碼或顯示出什麼確切的錯誤。

+0

這就是我發現,經過進一步的調查後,我發現直到從表單發佈數據時纔會記錄錯誤。 奇怪的部分是在後期處理過程中不使用包含此代碼的函數。 我將不得不深入探討這一點。 – MadScientist

相關問題