Jump to content

How to fetch the value from stdclass object?


huseyinergen

Recommended Posts

Hello everyone.

i have this problem like this. Can anybody help me? Result of var_dump command below and i want to get value "switch_1".

object(stdClass)#12 (4) {
  ["result"]=>
  array(6) {
    [0]=>
    object(stdClass)#3 (2) {
      ["code"]=>
      string(9) "work_mode"
      ["value"]=>
      string(6) "colour"
    }
    [1]=>
    object(stdClass)#5 (2) {
      ["code"]=>
      string(12) "bright_value"
      ["value"]=>
      int(255)
    }
    [2]=>
    object(stdClass)#8 (2) {
      ["code"]=>
      string(10) "temp_value"
      ["value"]=>
      int(255)
    }
    [3]=>
    object(stdClass)#9 (2) {
      ["code"]=>
      string(11) "colour_data"
      ["value"]=>
      string(28) "{"h":0.0,"s":255.0,"v":25.0}"
    }
    [4]=>
    object(stdClass)#10 (2) {
      ["code"]=>
      string(10) "switch_led"
      ["value"]=>
      bool(false)
    }
    [5]=>
    object(stdClass)#11 (2) {
      ["code"]=>
      string(8) "switch_1"
      ["value"]=>
      bool(true)
    }
  }
  ["success"]=>
  bool(true)
  ["t"]=>
  int(1697436125386)
  ["tid"]=>
  string(32) "884a243f6be911eeab9046acc027565a"
}

 

Link to comment
Share on other sites

object(stdClass)#12 (4) {

The value you dumped is an object.

  ["result"]=>
  array(6) {

It has a "result" property, which is an array.

    [...]=>
    object(stdClass)#11 (2) {

Somewhere in that array (you should probably not rely on it being in a particular place) is an object.

      ["code"]=>
      string(8) "switch_1"

It has a "code" property, which is a string with the value "switch_1".

      ["value"]=>
      bool(true)

That same object has a "value" property, which is the boolean value true.

This is an awkward structure to work with. What if you wanted other things besides the switch_1? Wouldn't it be nice if you had a single object/array that had everything at once?

Try this:

// assuming $object was the variable you dumped,
$results = array_reduce($object->results, function($array, $result) {
    $array[$result->code] = $result->value;
    return $array;
}, []);

Then try dumping out $results and see if the data is easier to use in that form.

Link to comment
Share on other sites

8 hours ago, requinix said:
object(stdClass)#12 (4) {

The value you dumped is an object.

  ["result"]=>
  array(6) {

It has a "result" property, which is an array.

    [...]=>
    object(stdClass)#11 (2) {

Somewhere in that array (you should probably not rely on it being in a particular place) is an object.

      ["code"]=>
      string(8) "switch_1"

It has a "code" property, which is a string with the value "switch_1".

      ["value"]=>
      bool(true)

That same object has a "value" property, which is the boolean value true.

This is an awkward structure to work with. What if you wanted other things besides the switch_1? Wouldn't it be nice if you had a single object/array that had everything at once?

Try this:

// assuming $object was the variable you dumped,
$results = array_reduce($object->results, function($array, $result) {
    $array[$result->code] = $result->value;
    return $array;
}, []);

Then try dumping out $results and see if the data is easier to use in that form.

Resuit is;

i got an error. Thank you for your response

 

Warning: array_reduce() expects parameter 1 to be array, null given in /volume1/web/tuya/sadece/get.php on line 76

Link to comment
Share on other sites

So you are showing us your newest error message.  So what do you think you need to do now?  Perhaps echo the prameters you are using in the call to "array_reduce" ?  That would tell you something.  Like the first parameter that is currently null.  Which means that your logic is flawed and you are not providing the needed data to this instruction.

Link to comment
Share on other sites

All Codes are below. Please help me. I can not find any solution..

<?php
    $config =
    [
        "secretKey" => "xxxxxxxx" ,
        "accessKey" => "xxxxxxxx" ,
        'baseUrl'	=> 'https://openapi.tuyaeu.com' ,
    ];
    require( 'TuyaApi.php' );
    $device_id = 'xxxxxx';
   $tuya = new \tuyapiphp\TuyaApi( $config );
    $token = $tuya->token->get_new( )->result->access_token;
    
$tuya->devices( $token )->get_app_list( $app_id );
// Get device status
$sonuc = $tuya->devices( $token )->get_status($device_id);
echo "<pre>";
//$object = (object) $sonuc;
var_dump($sonuc);
echo "</pre>";
echo "<br>";
?> 

 

Link to comment
Share on other sites

By 'All Codes' are you saying that you are showing us all of your php programming?   I doubt that is true but don't understand what else you are saying.

I see what looks like 2 possible errors in this code.  How about you add the following to the beginning of this code and running it?  Then send us the error messages and point out the lines that are causing them.

error_reporting(E_ALL);
ini_set('display_errors', '1');

 

Link to comment
Share on other sites

Hello.

Thank you for response.

This Codes controlling or getting status of tuya devices(wifi smart switch). When i sending "get_status" command, i got stdclass results (please look first message) get status command ($sonuc line).

 

I want to get switch_1 status from $sonuc results...

 

 

Link to comment
Share on other sites

You said you want to get switch_1 status.  To me (if I understand you) that means you expect that the string 'switch_1' has some kind of relationship to something called 'status' or something that you consider to be a 'status'.  Well - if I understand this code (not 'codes') of yours there is none.

Now - If you said you were looking for an element of your object that had a code of 'switch_1' and wanted to find the 'value' of that element then I could make sense of your dilemma.

Edited by ginerjm
Link to comment
Share on other sites

8 hours ago, requinix said:

Read my description of the var_dump output, then look closely at the code I posted (hint: the error message tells you exactly where to look). There was a typo.

i was try.

Codes here;

Quote

<?php

 

error_reporting(E_ALL);

ini_set('display_errors', '1');

 

 

 

    $config =

    [

        "secretKey" => "xxxx" ,

        "accessKey" => "xxxx" ,

        'baseUrl' => 'https://openapi.tuyaeu.com' ,

    ];

    require( 'TuyaApi.php' );

 

    $device_id = 'xxxx';

   $tuya = new \tuyapiphp\TuyaApi( $config );

    $token = $tuya->token->get_new( )->result->access_token;

    

//$tuya->devices( $token )->get_app_list( $app_id );

// Get device status

$sonuc = $tuya->devices( $token )->get_status($device_id);

 

echo "<pre>";

//$object = (object) $sonuc;

var_dump($sonuc);

echo "</pre>";

echo "<br>";

 

 

// assuming $object was the variable you dumped,

$results = array_reduce($sonuc->results, function($array, $result) {

    $array[$result->code] = $result->value;

    return $array;

}, []);

 

var_dump($results);

 

?> 

Results;

Quote

object(stdClass)#12 (4) {

  ["result"]=>

  array(6) {

    [0]=>

    object(stdClass)#4 (2) {

      ["code"]=>

      string(9) "work_mode"

      ["value"]=>

      string(6) "colour"

    }

    [1]=>

    object(stdClass)#5 (2) {

      ["code"]=>

      string(12) "bright_value"

      ["value"]=>

      int(255)

    }

    [2]=>

    object(stdClass)#8 (2) {

      ["code"]=>

      string(10) "temp_value"

      ["value"]=>

      int(255)

    }

    [3]=>

    object(stdClass)#9 (2) {

      ["code"]=>

      string(11) "colour_data"

      ["value"]=>

      string(28) "{"h":0.0,"s":255.0,"v":25.0}"

    }

    [4]=>

    object(stdClass)#10 (2) {

      ["code"]=>

      string(10) "switch_led"

      ["value"]=>

      bool(false)

    }

    [5]=>

    object(stdClass)#11 (2) {

      ["code"]=>

      string(8) "switch_1"

      ["value"]=>

      bool(true)

    }

  }

  ["success"]=>

  bool(true)

  ["t"]=>

  int(1697521609927)

  ["tid"]=>

  string(32) "910eb9e06cb011eeab9046acc027565a"

}

 

Notice: Undefined property: stdClass::$results in /volume1/web/tuya/sadece/get.php on line 32 Warning: array_reduce() expects parameter 1 to be array, null given in /volume1/web/tuya/sadece/get.php on line 35 NULL

Where is the problem in my codes 

Edited by huseyinergen
Wrong words
Link to comment
Share on other sites

Remember the part where I said

On 10/16/2023 at 2:12 AM, requinix said:
  ["result"]=>
  array(6) {

It has a "result" property, which is an array.

And remember the part where I posted

On 10/16/2023 at 2:12 AM, requinix said:
$results = array_reduce($object->results, function($array, $result) {

Take the time to understand what I was describing about how to read the var_dump output, then look at that one line of code I posted to see if it makes sense according to what I described. It should not make sense, and you should be able to spot a small error.

I'm trying to get you to learn here, instead of just accepting what a person on the internet says and copy/pasting their code. You can't be a chef by copying someone else, and you can't be a programmer by copying someone else.

Link to comment
Share on other sites

Can you try the below code, I hope you can get what you are looking for.

Quote

 

<?php
// Your JSON data as a string (you can also decode JSON from a file or API)
$jsonData = '{
    "result": [
        {
            "code": "work_mode",
            "value": "colour"
        },
        {
            "code": "bright_value",
            "value": 255
        },
        {
            "code": "temp_value",
            "value": 255
        },
        {
            "code": "colour_data",
            "value": "{"h":0.0,"s":255.0,"v":25.0}"
        },
        {
            "code": "switch_led",
            "value": false
        },
        {
            "code": "switch_1",
            "value": true
        }
    ],
    "success": true,
    "t": 1697436125386,
    "tid": "884a243f6be911eeab9046acc027565a"
}';

// Decode the JSON data into a PHP object
$data = json_decode($jsonData);

// Initialize the value variable to null
$switchValue = null;

// Loop through the "result" array to find the "switch_1" code
foreach ($data->result as $result) {
    if ($result->code === "switch_1") {
        $switchValue = $result->value;
        break;
    }
}

// Check if "switch_1" was found and display the value
if ($switchValue !== null) {
    echo 'Value for "switch_1" is: ' . $switchValue;
} else {
    echo 'Value for "switch_1" not found.';
}
?>

 

Thanks

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.