How to get value in an object in PHP - php

I have a variable with object like this in PHP code.
[{"author_id":2},{"author_id":1}]
How to get the value of author_id. thanks

use json_decode to convert the object in php and get it. Example:
<?php
$xx='[{"author_id":2},{"author_id":1}]';
$arr=json_decode($xx,true);
print_r($arr);
//Output: Array ( [0] => Array ( [author_id] => 2 ) [1] => Array ( [author_id] => 1 ) )
echo $arr[0]["author_id"];
//Outpu: 2
?>

This is serialized JSON Array with JSON objects inside.
$str = '[{"author_id":2},{"author_id":1}]';
$arr = json_decode($str, true);
foreach($arr as $item) {
echo $item['author_id'];
}

That data you posted is in JSON format. After decoding that standard format you can directly access the contents.
For the first entry that would simply be:
<?php
$data = json_decode('[{"author_id":2},{"author_id":1}]');
var_dump($data[0]->author_id);
The output obviously is:
int(2)
To access all entries have a try like that:
The output then is:
array(2) {
[0]=>
int(2)
[1]=>
int(1)
}

Related

How do i output an Array in PHP with JSON data in it? [duplicate]

I have this array
Array
(
[data] => Array
(
[0] => Array
(
[page_id] => 204725966262837
[type] => WEBSITE
)
[1] => Array
(
[page_id] => 163703342377960
[type] => COMMUNITY
)
)
)
How can I just echo the content without this structure?
I tried
foreach ($results as $result) {
echo $result->type;
echo "<br>";
}
To see the contents of array you can use:
print_r($array); or if you want nicely formatted array then:
echo '<pre>'; print_r($array); echo '</pre>';
Use var_dump($array) to get more information of the content in the array like the datatype and length.
You can loop the array using php's foreach(); and get the desired output. More info on foreach is in PHP's documentation website: foreach
This will do
foreach($results['data'] as $result) {
    echo $result['type'], '<br>';
}
If you just want to know the content without a format (e.g., for debugging purposes) I use this:
echo json_encode($anArray);
This will show it as a JSON which is pretty human-readable.
There are multiple functions for printing array content that each has features.
print_r()
Prints human-readable information about a variable.
$arr = ["a", "b", "c"];
echo "<pre>";
print_r($arr);
echo "</pre>";
Array
(
[0] => a
[1] => b
[2] => c
)
var_dump()
Displays structured information about expressions that includes its type and value.
echo "<pre>";
var_dump($arr);
echo "</pre>";
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
var_export()
Displays structured information about the given variable that returned representation is valid PHP code.
echo "<pre>";
var_export($arr);
echo "</pre>";
array (
0 => 'a',
1 => 'b',
2 => 'c',
)
Note that because the browser condenses multiple whitespace characters (including newlines) to a single space (answer), you need to wrap above functions in <pre></pre> to display result in thee correct format.
Also, there is another way to print array content with certain conditions.
echo
Output one or more strings. So if you want to print array content using echo, you need to loop through the array and in the loop use echo to print array items.
foreach ($arr as $key=>$item){
echo "$key => $item <br>";
}
0 => a
1 => b
2 => c
You can use print_r, var_dump and var_export functions of PHP:
print_r: Convert into human-readable form
<?php
echo "<pre>";
print_r($results);
echo "</pre>";
?>
var_dump(): will show you the type of the thing as well as what's in it.
var_dump($results);
foreach loop: using a for each loop, you can iterate each and every value of an array.
foreach($results['data'] as $result) {
echo $result['type'] . '<br>';
}
Try using print_r to print it in human-readable form.
foreach($results['data'] as $result) {
echo $result['type'], '<br />';
}
or echo $results['data'][1]['type'];
You don’t have any need to use a for loop to see the data into the array. You can simply do it in the following manner:
<?php
echo "<pre>";
print_r($results);
echo "</pre>";
?>
Human-readable (for example, can be logged to a text file...):
print_r($arr_name, TRUE);
You can use var_dump() function to display structured information about variables/expressions, including its type and value, or you can use print_r() to display information about a variable in a way that's readable by humans.
Example: Say we have got the following array, and we want to display its contents.
$arr = array ('xyz', false, true, 99, array('50'));
print_r() function - Displays human-readable output
Array
(
[0] => xyz
[1] =>
[2] => 1
[3] => 99
[4] => Array
(
[0] => 50
)
)
var_dump() function - Displays values and types
array(5) {
[0]=>
string(3) "xyz"
[1]=>
bool(false)
[2]=>
bool(true)
[3]=>
int(100)
[4]=>
array(1) {
[0]=>
string(2) "50"
}
}
The functions used in this answer can be found on the PHP documentation website, var_dump() and print_r().
For more details:
How to display PHP variable values with echo, print_r, and var_dump
How can I echo an array in PHP?
If you want a parsable PHP representation, you could use:
$parseablePhpCode = var_export($yourVariable,true);
If you echo the exported code to a file.php (with a return statement) you may require it as
$yourVariable = require('file.php');
I checked the answers, however, (for each) in PHP it is deprecated and no longer works with the latest PHP versions.
Usually, we would convert an array into a string to log it somewhere, perhaps debugging, test, etc.
I would convert the array into a string by doing:
$Output = implode(",", $SourceArray);
Whereas:
$output is the result (where the string would be generated
",": is the separator (between each array field).
$SourceArray: is your source array.
If you only need echo 'type' field, you can use function 'array_column' like:
$arr = $your_array;
echo var_dump(array_column($arr['data'], 'type'));
Loop through and print all the values of an associative array, You could use a foreach loop, like this:
foreach($results as $x => $value) {
echo $value;
}

Accessing object from array returns undefined

Below is the print output from $_POST['image']
stdClass Object
(
[0] => Array
(
['filename'] => cn-100x100.png
['contents'] =>
)
[1] => Array
(
['filename'] =>
['contents'] =>
)
)
when I do,
echo '<pre>';
print_r((object)$_POST['image'][0]['filename']);
exit;
it gives me an error
Notice: Undefined index: filename
Update
I tried to do var_dump( (array)$_POST['image']),
array(2) { ["'filename'"]=> string(14) "cn-100x100.png"
["'contents'"]=> string(10218) "base64..."}
If I removed the base64 data from the array column ['contents'], now I can access the first array.
you can update it
echo '<pre>';
print_r((array)$_POST['image'][0]['filename']);
exit;
Object properties cannot be accessed by using $object['property_name']
You have to use the arrow syntax $object->property_name or $object->{'property_name'}
In this case it looks like somehow $_POST['image'] has been defined as an object, so you would have to use:
$_POST['image']->{'0'}['filename']
You could also convert it to an array by using: $_POST['image'] = (array)$_POST['image'];
Convert all the object into the array by following way
$all_images= (array) $_POST['image'];
echo '<pre>';
print_r($all_images);
echo '</pre>';
Now, you can access like this $all_images[0]['filename']

PHP insert keys in string

I have the following string:
{"1":"http://localhost:8888/classecar/uploads/dropzone/ferrari1.jpg","2":"http://localhost:8888/classecar/uploads/dropzone/ferrari2.jpg","3":"http://localhost:8888/classecar/uploads/dropzone/ferrari3.jpg","4":"http://localhost:8888/classecar/uploads/dropzone/ferrari4.jpg"}
How can I get rid of the numbers preceding "http..." and transform this same numbers in array keys?
Like this:
[0] => "http...",
[1] => "http...",
[2] => "http...",
That looks like a JSON string, so you could decode it.
You could try
$array = json_decode($string, true);
You may also need to reindex the array so it is 0 based; so something like
$array = array_values(json_decode($string, true));
you are having an array data in JSON formation. you have to use a PHP function json_decode to get an result.
$php_array = json_decode($your_array[0], true);
//to see your array
print_r($php_array);
You are missing something I think.
Look at this snippet:
$a=[
0 => '{
"1":"http:\/\/localhost:8888\/classecar\/uploads\/dropzone\/ferrari1.jpg",
"2":"http:\/\/localhost:8888\/classecar\/uploads\/dropzone\/ferrari2.jpg",
"3":"http:\/\/localhost:8888\/classecar\/uploads\/dropzone\/ferrari3.jpg",
"4":"http:\/\/localhost:8888\/classecar\/uploads\/dropzone\/ferrari4.jpg"
}'
];
echo "<pre>";
print_r(json_decode($a[0],TRUE));
it returns:
Array
(
[1] => http://localhost:8888/classecar/uploads/dropzone/ferrari1.jpg
[2] => http://localhost:8888/classecar/uploads/dropzone/ferrari2.jpg
[3] => http://localhost:8888/classecar/uploads/dropzone/ferrari3.jpg
[4] => http://localhost:8888/classecar/uploads/dropzone/ferrari4.jpg
)
This will work considering that the array value is a "string" containing a json object.
A var_dump on your array will give you an exact idea on what type the array value is.
Hope this helps:
<?php
//you might want to convert the JSON string to an array:
$json = '{"1":"http://localhost:8888/classecar/uploads/dropzone/ferrari1.jpg","2":"http://localhost:8888/classecar/uploads/dropzone/ferrari2.jpg","3":"http://localhost:8888/classecar/uploads/dropzone/ferrari3.jpg","4":"http://localhost:8888/classecar/uploads/dropzone/ferrari4.jpg"}';
$array = json_decode($json);
var_dump($array);
// here you already have the json converted to an php array
$arrayWithoutStrangeIndexes = [];
foreach($array as $index => $content){
$arrayWithoutStrangeIndexes[]= $content;
}
// here is just your array with plain data
var_dump($arrayWithoutStrangeIndexes);

Get array out of a Json?

I am getting a Json respond with :
$response = curl_exec($rest);
$json = json_decode($response, true);
I manage to get its values(strings) with :
$foundUserId=$json['results'][0]['userId'];
$foundName=$json['results'][0]['name'];
$foundPhoneNum=$json['results'][0]['phoneNumber'];
But the last value- phoneNumber, is array of strings .
If i try then to loop over it i get nothing(although the array is there in the Json)
foreach ($foundPhoneNum as &$value)
{
print_r($value);
}
What am i doing wrong ?
EDIT :
The json:
Array ( [results] => Array ( [0] => Array ( [action] => message [createdAt] => 2015-11-21T09:36:33.620Z [deviceId] => E18DDFEC-C3C9 [name] => me [objectId] => klMchCkIDi [phoneNumber] => ["xx665542","xxx9446"] [state] => 1 [updatedAt] => 2015-11-22T08:24:46.948Z [userId] => 433011AC-228A-4931-8700-4D050FA18FC1 ) ) )
You might have json as a string inside json. That's why after json_decode() you still have json inside phoneNumber. You have 2 options:
Decode phoneNumber like
$foundPhoneNum=json_decode($json['results'][0]['phoneNumber']);
Build proper initial json. Instead of
{"phoneNumber": "[\"xx665542\",\"xxx9446\"]"}
should be
{"phoneNumber": ["xx665542","xxx9446"]}
There's a couple of ways to debug situations like this as mentioned in the comments; print_r() and var_dump().
var_dump(), although harder to read the first few times, is my favourite because it tells you the data types of each value in the array. This will confirm whether or not the expected string is indeed an array.
An example from the var_dump() documentation:
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
And the output is;
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
}
As you can see it shows array, int and string as the data types.
You might also like to install the Xdebug extension for PHP which dumps more useful error messages and tracebacks. Again harder to read the first few times, but well worth it!
foreach ($foundPhoneNum as $value)
{
print_r($value);
}
There was an extra & before $value. Try this.

How can I echo or print an array in PHP?

I have this array
Array
(
[data] => Array
(
[0] => Array
(
[page_id] => 204725966262837
[type] => WEBSITE
)
[1] => Array
(
[page_id] => 163703342377960
[type] => COMMUNITY
)
)
)
How can I just echo the content without this structure?
I tried
foreach ($results as $result) {
echo $result->type;
echo "<br>";
}
To see the contents of array you can use:
print_r($array); or if you want nicely formatted array then:
echo '<pre>'; print_r($array); echo '</pre>';
Use var_dump($array) to get more information of the content in the array like the datatype and length.
You can loop the array using php's foreach(); and get the desired output. More info on foreach is in PHP's documentation website: foreach
This will do
foreach($results['data'] as $result) {
    echo $result['type'], '<br>';
}
If you just want to know the content without a format (e.g., for debugging purposes) I use this:
echo json_encode($anArray);
This will show it as a JSON which is pretty human-readable.
There are multiple functions for printing array content that each has features.
print_r()
Prints human-readable information about a variable.
$arr = ["a", "b", "c"];
echo "<pre>";
print_r($arr);
echo "</pre>";
Array
(
[0] => a
[1] => b
[2] => c
)
var_dump()
Displays structured information about expressions that includes its type and value.
echo "<pre>";
var_dump($arr);
echo "</pre>";
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
var_export()
Displays structured information about the given variable that returned representation is valid PHP code.
echo "<pre>";
var_export($arr);
echo "</pre>";
array (
0 => 'a',
1 => 'b',
2 => 'c',
)
Note that because the browser condenses multiple whitespace characters (including newlines) to a single space (answer), you need to wrap above functions in <pre></pre> to display result in thee correct format.
Also, there is another way to print array content with certain conditions.
echo
Output one or more strings. So if you want to print array content using echo, you need to loop through the array and in the loop use echo to print array items.
foreach ($arr as $key=>$item){
echo "$key => $item <br>";
}
0 => a
1 => b
2 => c
You can use print_r, var_dump and var_export functions of PHP:
print_r: Convert into human-readable form
<?php
echo "<pre>";
print_r($results);
echo "</pre>";
?>
var_dump(): will show you the type of the thing as well as what's in it.
var_dump($results);
foreach loop: using a for each loop, you can iterate each and every value of an array.
foreach($results['data'] as $result) {
echo $result['type'] . '<br>';
}
Try using print_r to print it in human-readable form.
foreach($results['data'] as $result) {
echo $result['type'], '<br />';
}
or echo $results['data'][1]['type'];
You don’t have any need to use a for loop to see the data into the array. You can simply do it in the following manner:
<?php
echo "<pre>";
print_r($results);
echo "</pre>";
?>
Human-readable (for example, can be logged to a text file...):
print_r($arr_name, TRUE);
You can use var_dump() function to display structured information about variables/expressions, including its type and value, or you can use print_r() to display information about a variable in a way that's readable by humans.
Example: Say we have got the following array, and we want to display its contents.
$arr = array ('xyz', false, true, 99, array('50'));
print_r() function - Displays human-readable output
Array
(
[0] => xyz
[1] =>
[2] => 1
[3] => 99
[4] => Array
(
[0] => 50
)
)
var_dump() function - Displays values and types
array(5) {
[0]=>
string(3) "xyz"
[1]=>
bool(false)
[2]=>
bool(true)
[3]=>
int(100)
[4]=>
array(1) {
[0]=>
string(2) "50"
}
}
The functions used in this answer can be found on the PHP documentation website, var_dump() and print_r().
For more details:
How to display PHP variable values with echo, print_r, and var_dump
How can I echo an array in PHP?
If you want a parsable PHP representation, you could use:
$parseablePhpCode = var_export($yourVariable,true);
If you echo the exported code to a file.php (with a return statement) you may require it as
$yourVariable = require('file.php');
I checked the answers, however, (for each) in PHP it is deprecated and no longer works with the latest PHP versions.
Usually, we would convert an array into a string to log it somewhere, perhaps debugging, test, etc.
I would convert the array into a string by doing:
$Output = implode(",", $SourceArray);
Whereas:
$output is the result (where the string would be generated
",": is the separator (between each array field).
$SourceArray: is your source array.
If you only need echo 'type' field, you can use function 'array_column' like:
$arr = $your_array;
echo var_dump(array_column($arr['data'], 'type'));
Loop through and print all the values of an associative array, You could use a foreach loop, like this:
foreach($results as $x => $value) {
echo $value;
}

Categories