Home  >  Article  >  Backend Development  >  Is the result after converting an array to json an array or an object? (Travel record)

Is the result after converting an array to json an array or an object? (Travel record)

藏色散人
藏色散人forward
2021-01-19 15:57:353527browse

Recommended: "PHP Video Tutorial"

I often encounter these problems at work recently, so record them~

Here are the explanations Take a look, after json_encode, the results are all strings, but the results I mentioned here are the results after transferring to the front end, because recently more interface data has been written, and this kind of problem is often encountered. If it is only viewed in PHP, Then they can all be arrays...

Question: When converting arrays to json, sometimes they are objects and sometimes they are arrays?

Case 1:

$arr = [1,2,3];//数组下标从0开始的
echo json_encode($arr);     //[1,2,3] 

$arr = [1=>1,2=>2,3=>3];//数组下标不是从0开始
echo json_encode($arr);//{"1":1,"2":2,"3":3}

If you need to return an array at this time, you can handle it like this

$arr = [1=>1,2=>2,3=>3];
echo json_encode(array_values($arr));//[1,2,3]

Case 2:

$arr = [];
$arr[0] = 'xxx';
$arr[1] = 'yyy';
echo json_encode($arr);//["xxx","yyy"] 

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
echo json_encode($arr);//{"1":"yyy","0":"xxx"}

You can see that the subscripts of the assignments are the same, but the order of execution has changed, and the results are also different

The following is a solution suggested by a friend

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
$arr = array_values($arr);
echo json_encode($arr);//["yyy","xxx"]

You can see that there is a problem with the result. The original index of yyy is 1, and the result is 0
The result we want is ["xxx", "yyy"]

Here is a solution

$arr = [];
$arr[1] = 'yyy';
$arr[0] = 'xxx';
ksort($arr);
echo json_encode($arr);//["xxx","yyy"]

Case 3:

$arr = [];
$arr[0] = 'yyy';
$arr[2] = 'xxx';
print_r($arr);
echo json_encode($arr);
/*Array
(
    [0] => yyy
    [2] => xxx
)
{"0":"yyy","2":"xxx"}
*/

Case 4:

$arr = [];
echo json_encode($arr);//[]

Summary:

When converting an array to json, if the index is not 0, 1, 2,... starting from 0 in order, the returned json structure is an object; if you want to return an array , it must be strictly required that the index starts from 0, in order, there can be no broken numbers in the middle                                       

The above is the detailed content of Is the result after converting an array to json an array or an object? (Travel record). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete