How to solve PHP error 'Notice: Array to string conversion in...'
When you have many HTML inputs named C[]
what you get in the POST array on the other end is an array of these values in $_POST['C']
. So when you echo
that, you are trying to print an array, so all it does is print Array
and a notice.
To print properly an array, you either loop through it and echo
each element, or you can use print_r
.
Alternatively, if you don't know if it's an array or a string or whatever, you can use var_dump($var)
which will tell you what type it is and what it's content is. Use that for debugging purposes only.
What the PHP Notice means and how to reproduce it:
If you send a PHP array into a function that expects a string like: echo
or print
, then the PHP interpreter will convert your array to the literal string Array
, throw this Notice and keep going. For example:
php> print(array(1,2,3))PHP Notice: Array to string conversion in /usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(591) :eval()'d code on line 1Array
In this case, the function print
dumps the literal string: Array
to stdout and then logs the Notice to stderr and keeps going.
Another example in a PHP script:
<?php $stuff = array(1,2,3); print $stuff; //PHP Notice: Array to string conversion in yourfile on line 3?>
Correction 1: use foreach loop to access array elements
$stuff = array(1,2,3);foreach ($stuff as $value) { echo $value, "\n";}
Prints:
123
Or along with array keys
$stuff = array('name' => 'Joe', 'email' => 'joe@example.com');foreach ($stuff as $key => $value) { echo "$key: $value\n";}
Prints:
name: Joeemail: joe@example.com
Note that array elements could be arrays as well. In this case either use foreach
again or access this inner array elements using array syntax, e.g. $row['name']
Correction 2: Joining all the cells in the array together:
In case it's just a plain 1-demensional array, you can simply join all the cells into a string using a delimiter:
<?php $stuff = array(1,2,3); print implode(", ", $stuff); //prints 1, 2, 3 print join(',', $stuff); //prints 1,2,3
Correction 3: Stringify an array with complex structure:
In case your array has a complex structure but you need to convert it to a string anyway, then use http://php.net/json_encode
$stuff = array('name' => 'Joe', 'email' => 'joe@example.com');print json_encode($stuff);
Prints
{"name":"Joe","email":"joe@example.com"}
A quick peek into array structure: use the builtin php functions
If you want just to inspect the array contents for the debugging purpose, use one of the following functions. Keep in mind that var_dump is most informative of them and thus usually being preferred for the purpose
examples
$stuff = array(1,2,3);print_r($stuff);$stuff = array(3,4,5);var_dump($stuff);
Prints:
Array( [0] => 1 [1] => 2 [2] => 3)array(3) { [0]=> int(3) [1]=> int(4) [2]=> int(5)}
You are using <input name='C[]'
in your HTML. This creates an array in PHP when the form is sent.
You are using echo $_POST['C'];
to echo that array - this will not work, but instead emit that notice and the word "Array".
Depending on what you did with the rest of the code, you should probably use echo $_POST['C'][0];