0

I tried in many ways, but none is my specific problem, I tried to use what I know, but to no avail. I'm trying to use file_get_contents to get the json from 1 file.json on my server, and calculate a specific array, but after the "array_column" it returns an empty array.

<?php  
$json_url = "http://myserver/file.json"; 
$json = file_get_contents($json_url);

$data  = json_decode($json, true); 
$price = array_column($data, 'valor');

print_r($price);

//output = array() | empyty array

the $json return the correct json, in the $data return the corret decoded json, but in $price, return empty array()

the $json content of my json file in my server is similar to it:

{
"1228421731": [
    {
        "valor": 10,
        "datelimite": 1644024834,
        "date": 1643420034,
        "codigo": "ALYCGKU76S"
    }
],
"1111925985": [
    {
        "valor": 25,
        "datelimite": 1644066350,
        "date": 1643461550,
        "codigo": "HK8NQROGBW"
    }
],
"1413051871": [
    {
        "valor": 50,
        "datelimite": 1644084293,
        "date": 1643479493,
        "codigo": "4NGJ523J6H"
    }
],
"1209626299": [
    {
        "valor": 10,
        "datelimite": 1644091732,
        "date": 1643486932,
        "codigo": "W7LRGY3FHZ"
    }
],
"1803561706": [
    {
        "valor": 10,
        "datelimite": 1644257719,
        "date": 1643652919,
        "codigo": "GE8IDPZN9H"
    },
    {
        "valor": 19865091226,
        "datelimite": 1644288984,
        "date": 1643684184,
        "codigo": "F5Q9TPE43SWAFX"
    }
],
"1710879952": [
    {
        "valor": 19865091226,
        "datelimite": 1644274668,
        "date": 1643669868,
        "codigo": "P5M4E6RP1ZPEUR"
    }
],
"1907375762": [
    {
        "valor": 10,
        "datelimite": 1644377257,
        "date": 1643772457,
        "codigo": "E8OKPVCYVWRHUI"
    }
],
"1863764959": [
    {
        "valor": 25,
        "datelimite": 1644427955,
        "date": 1643823155,
        "codigo": "L78EZKJZJ93UYW"
    }
],
"1831713303": [
    {
        "valor": 10,
        "datelimite": 1644442109,
        "date": 1643837309,
        "codigo": "3J84VTS5FRS6OI"
    }
],
"5193759120": [
    {
        "valor": 10,
        "datelimite": 1644453308,
        "date": 1643848508,
        "codigo": "88942HFHZ5JJ56"
    }
],
"1785872541": [
    {
        "valor": 10,
        "datelimite": 1644504518,
        "date": 1643899718,
        "codigo": "LBML4O31RLC7DW"
    }
],
"1666986497": [
    {
        "valor": 1,
        "datelimite": 1644667829,
        "date": 1644063029,
        "codigo": "HXHPK6XLNBD89E"
    }
]

}

how can i use array_column for this json type? for the array 'valor'?

3 Answers 3

2

$data is in this format

Array
(
    [1228421731] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644024834
                    [date] => 1643420034
                    [codigo] => ALYCGKU76S
                )

        )

    [1111925985] => Array
        (
            [0] => Array
                (
                    [valor] => 25
                    [datelimite] => 1644066350
                    [date] => 1643461550
                    [codigo] => HK8NQROGBW
                )

        )

    [1413051871] => Array
        (
            [0] => Array
                (
                    [valor] => 50
                    [datelimite] => 1644084293
                    [date] => 1643479493
                    [codigo] => 4NGJ523J6H
                )

        )

    [1209626299] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644091732
                    [date] => 1643486932
                    [codigo] => W7LRGY3FHZ
                )

        )

    [1803561706] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644257719
                    [date] => 1643652919
                    [codigo] => GE8IDPZN9H
                )

            [1] => Array
                (
                    [valor] => 19865091226
                    [datelimite] => 1644288984
                    [date] => 1643684184
                    [codigo] => F5Q9TPE43SWAFX
                )

        )

    [1710879952] => Array
        (
            [0] => Array
                (
                    [valor] => 19865091226
                    [datelimite] => 1644274668
                    [date] => 1643669868
                    [codigo] => P5M4E6RP1ZPEUR
                )

        )

    [1907375762] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644377257
                    [date] => 1643772457
                    [codigo] => E8OKPVCYVWRHUI
                )

        )

    [1863764959] => Array
        (
            [0] => Array
                (
                    [valor] => 25
                    [datelimite] => 1644427955
                    [date] => 1643823155
                    [codigo] => L78EZKJZJ93UYW
                )

        )

    [1831713303] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644442109
                    [date] => 1643837309
                    [codigo] => 3J84VTS5FRS6OI
                )

        )

    [5193759120] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644453308
                    [date] => 1643848508
                    [codigo] => 88942HFHZ5JJ56
                )

        )

    [1785872541] => Array
        (
            [0] => Array
                (
                    [valor] => 10
                    [datelimite] => 1644504518
                    [date] => 1643899718
                    [codigo] => LBML4O31RLC7DW
                )

        )

    [1666986497] => Array
        (
            [0] => Array
                (
                    [valor] => 1
                    [datelimite] => 1644667829
                    [date] => 1644063029
                    [codigo] => HXHPK6XLNBD89E
                )

        )

)

so I think you can try to get the first array element in each array and then operate on those arrays, like this

$price = array_column(array_column($data, 0),'valor');

This will give the results

Sign up to request clarification or add additional context in comments.

3 Comments

This will not work, since not all subarrays contain only one element. Key '1803561706' contains two items.
Thank you for the correction, I will correct my answer
Sorry, I didn't find an efficient way to reduce the dimension of the array. Maybe you can use foreach.
0

You can try this

array_column(array_merge(...(json_decode($json,true))),"valor")

This will return an array with all the values of valor

Comments

0

If you want an array of all valor values:

$flatArray = array_reduce(
    json_decode($json, true),
    fn($carry, $item) => $carry = array_merge($carry, array_column($item, 'valor')),
    []
);

If you want an array grouped by valors belonging together:

$groupedArray = array_reduce(
    json_decode($json, true),
    fn($carry, $item) => $carry = array_merge($carry, [ array_column($item, 'valor') ]),
    [])
;

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.