【问题标题】:Array to string conversion error when using implode使用 implode 时数组到字符串的转换错误
【发布时间】:2014-11-13 19:14:06
【问题描述】:

我对出现的错误感到困惑 Array to string conversion

我感到困惑的原因是我正试图这样做,将数组转换为字符串,使用 implode 根据手册应该允许我将数组转换为字符串。那么为什么我会收到错误消息?

var $matches 是一个数组。 $error_c 是我要存储字符串的 var。

print_r($matches); // prints the array correctly
$error_c = implode(',', $matches);
echo $error_c;

简单地输出array 并给出:

Notice: Array to string conversion in ...

手册上写着implode — Join array elements with a string,为什么我尝试这样做时会出错?

编辑:这是我从$matches得到的输出

Array ( [0] => Array ( [0] => C [1] => E [2] => R [3] => R [4] => O [5] => R [6] => C [7] => O [8] => N [9] => T [10] => A [11] => C [12] => T [13] => S [14] => U [15] => P [16] => P [17] => R [18] => E [19] => S [20] => S [21] => E [22] => D ) ) 

【问题讨论】:

  • 你的数组元素应该是字符串或者有__toString的能力
  • 你明白了!检查答案;)
  • $matches 是一个数组。那么你如何在不爆炸的情况下将整个数组 $matches 内爆,如果不是,那么你必须提到索引数组,如 $matches[0]
  • 这是人们在处理 PHP 时有时会遇到的特定错误 - 它根本不宽泛。该错误实际上是带有“内爆”的特定代码行上的“数组到字符串转换”。我不同意在此基础上结束问题。事实上,我正是因为它的措辞与我正在寻找的错误完全匹配,才找到了这个问题,而答案帮助我解决了这个问题。它不是太宽泛。

标签: php arrays string implode


【解决方案1】:

你有一个数组...试试这个:

$error_c = implode(',', $matches[0]);

【讨论】:

    【解决方案2】:

    这样做:

    print_r($matches); // prints the array correctly
    $error_c = implode(',', $matches[0]);
    echo $error_c;
    

    【讨论】:

      【解决方案3】:
      $error_c = implode(',', $matches[0]);
      echo $error_c;
      

      因为您的array 内部包含arrays

      【讨论】:

        【解决方案4】:

        要将数组中的任何数据放入字符串中,试试这个

        function whatever_to_string($in){
            ob_start();
            print_r($in);
            return ob_get_clean();
            }
        

        “ob_*”函数控制输出缓冲区。

        http://php.net/manual/en/function.ob-start.php

        http://php.net/manual/en/function.ob-get-clean.php

        【讨论】:

          【解决方案5】:

          您可以将array_values() 用于数组数组

          例如implode (",", array_values($array))

          【讨论】:

            【解决方案6】:

            问题是由于您在二维的Array 上调用implode

            Array ( 
                [0] => Array ( 
                    [0] => C 
                    [1] => E 
                    [2] => R 
                    [3] => R 
                    [4] => O 
                    [5] => R 
                    [6] => C 
                    [7] => O 
                    [8] => N 
                    [9] => T 
                    [10] => A 
                    // ...
                ) 
            ) 
            

            相当于

            [["C", "E", "R", "R", "O", "R", "C", "O", "N", "..." ]]
            

            在执行 implode 之前您应该做的是展平数组,然后您可以使用展平的数组调用 implode,或者仅使用主数组中的第一项(即数组)调用 implode。

            这是一个问题,它提供了展平数组的指导 How to Flatten a Multidimensional Array?

            使用允许展平数组的函数,您可以像这样执行调用

            implode(flatten($array_of_data), $matches);
            

            无需仅访问第一项,无论$matches 数组中有多少项,flatten 函数都将返回一个一维数组,您可以在该数组上调用implode

            【讨论】:

              猜你喜欢
              • 2013-10-19
              • 1970-01-01
              • 1970-01-01
              • 2015-02-26
              • 2012-07-15
              • 2017-12-02
              • 1970-01-01
              • 1970-01-01
              • 2019-02-27
              相关资源
              最近更新 更多