2017-01-11 52 views
0

關聯數組$ myArray的的的var_dump如下:值關聯數組元素的不被識別爲字符串

array (size=522) 
    0 => 
    array (size=3) 
     'id' => int 1 
     'url' => string 'introduction' (length=12) 
     'title' => string 'Introduction' (length=12) 
    1 => 
    array (size=3) 
     'id' => int 2 
     'url' => string 'first_steps' (length=11) 
     'title' => string 'First steps' (length=11) 
    2 => ... 

當我分配關聯數組中元素的值到一個功能,以執行一些字符串操縱,我得到一個錯誤:

"Catchable fatal error: Argument 1 passed to doStringManipulation() must be an instance of string, string given, ..."

的字符串操作被稱爲foreach循環中:

foreach($myArray as $row){ 
    ... 
    $s = doStringManipulation((string) $row['url']); // triggers error 
    ... 
} 

function doStringManipulation(string str){ 
    ... 
    return $result; // string 
} 

無論我是否將$ row ['url']轉換爲字符串都沒有區別。儘管var_dump確認元素值是一個字符串,但我總是得到錯誤。

我在這裏錯過了什麼?

謝謝!

+0

的PHP版本您使用的? – Robert

+0

您是否嘗試過不將$ row ['url']作爲參數,但例如「test」? (嘗試沒有投) –

+0

也許這可以幫助http://stackoverflow.com/questions/4103480/really-php-argument-1-passed-to-my-function-must-be-an-instance-of-string -s –

回答

0

我要你不使用PHP 7

的錯誤狀態,它需要串的一個實例來承擔(哪些php沒有),這是因爲你在function doStringManipulation(string str){中鍵入提示string。類型提示不適用於數組和對象。

我的建議:

function doStringManipulation($str) { // assuming 'str' was a typo here 
    if (! is_string($str)) { 
     return ''; 
    } 

    ... 

    return $result; // string 
} 

欲瞭解更多信息,請參閱:http://php.net/manual/en/migration70.new-features.php

+0

謝謝,這是最完整的答案。 – fdv

0

您使用php版本5.0-5.6。你不能指定字符串作爲函數參數。 代碼必須看起來像

/** 
* @var String str 
*/ 
function doStringManipulation(str){ 
    ... 
    return $result; // string 
} 

或更新PHP高達7

+0

謝謝。也許我得到了一些適用於PHP 7的代碼提示。 – fdv