36

I'm confused about an error I am getting stating Array to string conversion

The reason I'm confused is I'm trying to do exactly that, convert an array to a string, using implode which according to the manual should allow me to convert my array into a string. So why am I getting an error?

var $matches is an array. $error_c is the var I want to store the string.

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

Outputs simply array and gives:

Notice: Array to string conversion in ...

The manual states that implode — Join array elements with a string so why do I get an error when I try to do it?

Edit: this is the output I get from $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 ) ) 
4
  • the element of your array should be string or have __toString capability Commented Sep 19, 2014 at 8:43
  • You got it! Check the answers ;) Commented Sep 19, 2014 at 8:44
  • 1
    $matches is an array . then how can u implode the whole array $matches without exploding it, if not then u have to mention with index array like $matches[0] Commented Sep 19, 2014 at 9:13
  • 3
    This is a specific error encountered by folks sometimes when dealing with PHP - it's not broad at all. The error is literally "array to string conversion" on the specific line of code with "implode". I disagree with the closing of the question on this basis. In fact, I landed on this question precisely because its wording exactly matched the error I was looking for, and the answer helped me solved it. It's not too broad. Commented Sep 9, 2016 at 8:59

7 Answers 7

45

You have an array of arrays... Try this:

$error_c = implode(',', $matches[0]);
Sign up to request clarification or add additional context in comments.

Comments

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

because your array contains arrays inside

Comments

6

The issue is due to the fact that you are call implode on an Array which is two dimensionnal.

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 
        // ...
    ) 
) 

which is equivalent to

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

What you should do before performing an implode is to flatten the array and after that you can call implode with the flattened array or by calling implode only with the first item in the main array which is an array.

Here is a question which provide guidance to flatten an array How to Flatten a Multidimensional Array?

With a function which allows to flatten an array you can perform the call like this

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

No need to access the first item only, whatever number of items are in $matches array the flatten function will return a one dimensionnal Array on which you can call implode

Comments

2

Do that:

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

Comments

2

You may use array_values() for array of arrays

e.g. implode (",", array_values($array))

Comments

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

Comments

-1

To just put whatever data is in the array into a string, try this

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

The 'ob_*' functions control the output buffer.

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.