2013-03-12 72 views
20

我接收到該錯誤「警告:非法串偏移‘類型’在/home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php在線路32」如何更正此非法字符串偏移量?

和我意識到文件中的這段代碼是錯誤的,但是我在PHP中並不是那麼棒,我想知道是否有人可以幫我重寫這一節以消除錯誤。謝謝!

這裏(在其低於if語句的開頭線32開始的誤差)是代碼:

/* new version */ 
    function get_attachment_struct($inputs){ 
     $attach = array(); 

    if($inputs['type'] == 'attach'){ 
      $name = $inputs['name']; 
      $attach = array(
       0 => array(
        'name' => $name, 
        'type' => 'text', 
        'label' => 'Attachment URL', 
        'lvisible' => false, 
        'upload' => true, 
       ), 
       1 => array(
        'name' => $name .'_id', 
        'type' => 'hidden', 
        'upload' => true 
       ), 
      ); 

      if(isset($inputs[ 'classes' ])){ 
       $attach[0]['classes'] = $inputs[ 'classes' ]; 
       $attach[1]['classes'] = $inputs[ 'classes' ] . '_id'; 
      } 
     } 
     return $attach; 
    } 

    /* new version */ 
+1

您的$輸入可能不是數組或不具有'類型'偏移量。在與函數一起使用之前,先嚐試對參數做var_dump()或print_r()。代碼看起來很好第一眼編輯:在你的$ attach => 0數組中,'upload'=> true後,你應該取出這個逗號。 – aleation 2013-03-12 12:40:48

+0

@aleation我想說,給第二個數組添加一個逗號可能比從第一個數組中移除一個逗號更好,但這兩種情況都不是錯誤。 – Boann 2013-03-12 13:32:40

回答

39
if ($inputs['type'] == 'attach') { 

該代碼是有效的,但它期望功能參數$inputs是數組。當使用$inputs['type']時,「非法字符串偏移」警告意味着該函數正在傳遞一個字符串而不是一個數組。 (然後由於字符串偏移是一個數字,'type'是不適合的。)

因此理論上問題在於其他地方,代碼的調用者沒有提供正確的參數。

但是,此警告消息是PHP 5.4的新增功能。舊版本沒有警告,如果這發生。他們會默默地將'type'轉換爲0,然後嘗試獲取字符串的字符0(第一個字符)。所以,如果這段代碼應該工作,那是因爲濫用像這樣的字符串在PHP 5.3及以下版本中沒有引起任何抱怨。 (很多老的PHP代碼升級後遇到此問題。)

您可能要調試爲什麼功能正在被檢查調用代碼給出一個字符串,並找出哪些價值有通過做var_dump($inputs);中的函數。但是,如果你只是想關閉該警告直至使其行爲像PHP 5.3,行更改爲:

if (is_array($inputs) && $inputs['type'] == 'attach') { 
+0

非常感謝你!是的 - 這與升級到PHP 5.4有關,這是一個巨大的痛苦。我將在不久的將來轉換主題,我不想處理重新寫入它或正在挖掘它是什麼,所以非常感謝你給我一個簡單的解決方法。那更多的PHP比我現在知道的更多。謝謝! – gabearnold 2013-03-12 13:34:26

+0

非常感謝!對於那些未來/搜索者來說:這解決了我的問題與megusta主題 - 猜我的主機升級php:/ – ptim 2014-07-18 04:00:40

0
if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox")) 
{ 
    if(!isset($data[$field])) 
     $data[$field]=""; 
} 
+1

代碼的答案對教育OP和未來的讀者做的很少。總是努力在某種程度上解釋你的方法的作用以及爲什麼它是一個合適的解決方案。 – mickmackusa 2017-11-19 22:52:27

-1

我得到了WP同樣的錯誤,當我使用的PHP版本7.1.6 - 只是把你的PHP版本恢復到7.0.20,錯誤將會消失。

+1

因爲降級PHP版本始終是一個可擴展的解決方案 – 2017-10-29 14:09:13

相關問題