关联数组元素的值未识别为字符串

时间:2017-01-11 12:42:31

标签: php arrays string

关联数组$ 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 => ...

当我将关联数组中的元素值赋给函数时,为了执行某些字符串操作,我收到错误:

  

“可捕获的致命错误:传递给doStringManipulation()的参数1必须是字符串的实例,给定字符串,......”

在foreach循环中调用字符串操作:

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

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

我是否将$ row ['url']转换为字符串并没有什么区别。我总是得到错误,即使var_dump确认元素值是一个字符串。

我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

您使用的是php 5.0-5.6版。你不能指定字符串作为函数参数。 代码必须看起来像

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

或者将php更新到7

答案 1 :(得分:0)

我假设你没有使用php 7。

错误表明它需要一个字符串实例(php没有),这是因为你在string中键入了提示function doStringManipulation(string str){。类型提示不适用于除数组和对象之外的任何内容。

我的建议:

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