使用implode函数时出现了数组转字符串转换错误

33

我对一个错误感到困惑,错误提示为Array to string conversion

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

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

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

输出简单的数组并给出:

Notice: Array to string conversion in ...

手册说明implode - 用字符串连接数组元素,那么为什么我尝试这样做时会出现错误?
编辑:这是我从$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功能。 - George G
你做得很好!检查一下答案吧 ;) - lpg
1
$matches是一个数组。如果不想使用explode函数,那么如何将整个$matches数组合并成一个字符串?如果不行的话,你需要指定索引数组,例如$matches[0]。 - user3697634
3
有时候在处理PHP时,人们会遇到这个特定的错误——它并不是很广泛。这个错误文字上的意思是“将数组转换为字符串”,出现在使用"implode"代码的特定行上。基于此,我不同意关闭这个问题。实际上,我找到了这个问题,正是因为它的措辞恰好与我正在寻找的错误相匹配,而且答案帮助我解决了这个问题。它并不过于宽泛。 - Dan Nissenbaum
7个回答

43

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

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

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

因为你的数组里面包含了数组


5
问题出在你对一个二维的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。
以下是提供展开数组指导的问题如何展开多维数组? 通过允许展开数组的函数,您可以像这样进行调用。
implode(flatten($array_of_data), $matches);

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

2

请执行以下操作:

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

2
你可以使用 array_values() 处理数组嵌套的情况。

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


0
#best way! fast and easy 

$string = 'whatever';
$array = (['new'],['old'],['whatever']);

    for($i = 0;$i < count($array);$i++)
    if(str_contains(json_encode($host),implode(',',$array[$i]))){
    $found = true;
    }if($found == true){echo "found";}else{echo "not found";}

# returns found

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接