imgrooot Posted June 29, 2017 Share Posted June 29, 2017 (edited) I asked this question before and I did receive the answer I was looking for. But now I realize something. It only works for the first result. Let me explain. I am using this API. https://block.io/api/simple/php $get_address = $block_io->get_transactions(array('type' => 'received', 'addresses' => $my_wallet)); $api_amount = $get_address->data->txs[0]->amounts_received[0]->amount; $api_recp = $get_address->data->txs[0]->amounts_received[0]->recipient; $api_trans_id = $get_address->data->txs[0]->txid; $api_sender_id = $get_address->data->txs[0]->senders; These are variables above i am using to check if something is true or not. For eg. The form below. I want to check if the $api_trans_id matches the the post id I submit below. if($api_trans_id == $_POST['trans-id']) { echo 'Success'; } else { echo 'Fail.'; } <form action="" method="post"> <input type="text" name="trans-id" value="" maxlength="1084" /> <input type="submit" name="submit" value="Submit" /> </form> The above works if the first result in the json array below has the same post id or else it fails. I want to loop through ALL the json arrays and try to match the post id($_POST['trans-id']). Below are the 3 array results to give you an example. The first txid is "41d9afcc73da63c45674088411460116cfefe324cc7a6f5fcb267d9f584adf73". If I submit this same id as the post id in the form, it'll be success full. But if I use the 2nd or 3rd txid below, it will fail. So how can I change this "$api_trans_id = $get_address->data->txs[0]->txid;" so that it looks for all three txid instead of only the first one? { "status" : "success", "data" : { "network" : "BTC", "txs" : [ { "txid" : "41d9afcc73da63c45674088411460116cfefe324cc7a6f5fcb267d9f584adf73", "from_green_address" : false, "time" : 1496877627, "confirmations" : 3080, "amounts_received" : [ { "recipient" : "1QFaAYB4r8sk7MG3beb7yY4R21t9JrnMwK", "amount" : "0.00200000" } ], "senders" : [ "2EqvPUTwjUuon6c2a6YxBreJtBkkZD5fsp" ], "confidence" : 1.0, "propagated_by_nodes" : null }, { "txid" : "2f72d4dd97234937ddf6e8174b17a9a421ba35bbfb6fa40cfeb6ac92db6ce032", "from_green_address" : false, "time" : 1491675979, "confirmations" : 12338, "amounts_received" : [ { "recipient" : "1QFaAYB4r8sk7MG3beb7yY4R21t9JrnMwK", "amount" : "0.00010000" } ], "senders" : [ "3L98MQZKvwNo21fFpY7RJ9HYfYdv62XpYz" ], "confidence" : 1.0, "propagated_by_nodes" : null }, { "txid" : "fce58f0cb1d32c1ed7c27825c41753ce98323771bd931f0a0f99b6294d9ee642", "from_green_address" : false, "time" : 1491672301, "confirmations" : 12341, "amounts_received" : [ { "recipient" : "1QFaAYB4r8sk7MG3beb7yY4R21t9JrnMwK", "amount" : "0.00010000" } ], "senders" : [ "4L98MQZKvwNo21fFpY7RJ9HYfYdv62XpYz" ], "confidence" : 1.0, "propagated_by_nodes" : null }, ] } } Edited June 29, 2017 by imgrooot Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/ Share on other sites More sharing options...
kicken Posted June 29, 2017 Share Posted June 29, 2017 Just loop through the txs array and check each transaction. foreach ($get_address->data->txs as $tx){ $api_amount = $tx->amounts_received[0]->amount; $api_recp = $tx->amounts_received[0]->recipient; $api_trans_id = $tx->txid; $api_sender_id = $tx->senders; //... } 1 Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547830 Share on other sites More sharing options...
imgrooot Posted June 29, 2017 Author Share Posted June 29, 2017 (edited) Just loop through the txs array and check each transaction. foreach ($get_address->data->txs as $tx){ $api_amount = $tx->amounts_received[0]->amount; $api_recp = $tx->amounts_received[0]->recipient; $api_trans_id = $tx->txid; $api_sender_id = $tx->senders; //... } I'm assuming you mean check if it's true or not inside the foreach loop like this? foreach ($get_address->data->txs as $tx){ $api_amount = $tx->amounts_received[0]->amount; $api_recp = $tx->amounts_received[0]->recipient; $api_trans_id = $tx->txid; $api_sender_id = $tx->senders; if($api_trans_id == $_POST['trans-id']) { echo 'Success'; } else { echo 'Fail.'; } } If so then I get the "Fail" error. It's shown repeated multiple times. Edited June 29, 2017 by imgrooot Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547832 Share on other sites More sharing options...
imgrooot Posted June 29, 2017 Author Share Posted June 29, 2017 (edited) Alright so I think I figured it out. Using "kicken"'s foreach loop, I need to turn the loop variables into an array and access them outside the loop like this. $api_amount = array(); $api_recp = array(); $api_trans_id = array(); $api_sender_id = array(); foreach($get_address->data->txs as $tx){ $api_amount[] = $tx->amounts_received[0]->amount; $api_recp[] = $tx->amounts_received[0]->recipient; $api_trans_id[] = $tx->txid; $api_sender_id[] = $tx->senders; } $post_transid = $_POST['trans-id'];if(in_array($post_transid, $api_trans_id)) { echo 'yes'; } else { echo 'no'; }if(in_array('0.00400000', $api_amount)) {echo 'yes';} else {echo 'no';} The above works. One thing that doesn't work is the "$api_sender_id". I realized why. This is how it looks in json. If you look closley you will notice the value of "senders" is directly after the bracket ([). The others don't have that. So how do I access this "senders" value? status" : "success", "data" : { "network" : "BTC", "txs" : [ { "txid" : "71d9afcc73da63c45674088411460116cfefe324cc7a6f5fcb267d9f584adf73", "from_green_address" : false, "time" : 1496877627, "confirmations" : 3080, "amounts_received" : [ { "recipient" : "4QFaAYB4r8sk7MG3beb7yY4R21t9JrnMwK", "amount" : "0.00200000" } ], "senders" : [ "6EqvPUTwjUuon6c2a6YxBreJtBkkZD5fsp" ], "confidence" : 1.0, "propagated_by_nodes" : null } ] } Edit: Sorry for the shit code paste. It shows in fine in the code editor but it for some reason it shows outside of it after I save it. Edited June 29, 2017 by imgrooot Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547837 Share on other sites More sharing options...
imgrooot Posted June 29, 2017 Author Share Posted June 29, 2017 I tried it as $api_sender_id[] = $tx->senders[0]; And it seems to work. So far so good. Please let me know if anything I've said is incorrect. Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547838 Share on other sites More sharing options...
imgrooot Posted June 29, 2017 Author Share Posted June 29, 2017 Well since no one else has anything to add. Here's my full answer to the original problem. $api_amount = array(); $api_recp = array(); $api_trans_id = array(); $api_sender_id = array(); foreach($get_address->data->txs as $tx){ $api_amount[] = $tx->amounts_received[0]->amount; $api_recp[] = $tx->amounts_received[0]->recipient; $api_trans_id[] = $tx->txid; $api_sender_id[] = $tx->senders[0]; } $post_transid = $_POST['trans-id']; // example 1 if(in_array($post_transid, $api_trans_id)) { echo 'yes'; } else { echo 'no'; } // example 2 if(in_array('0.00400000', $api_amount)) { echo 'yes'; } else { echo 'no'; } Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547841 Share on other sites More sharing options...
Solution Jacques1 Posted June 29, 2017 Solution Share Posted June 29, 2017 How are we supposed to tell you what you want? There are multiple senders and received amounts, and you've picked the first one while ignoring the rest. This could be horribly wrong or exactly right, depending on what you actually want to do. In any case, your code is rather weird. What's the point of iterating over the transactions, storing the various items in new arrays and then iterating over those arrays to finally do the checks? Why not just check the transactions directly? This is basic programming: <?php // let's use a more sensible name than $get_address to hold the transactions $last_received_transactions = $block_io->get_transactions(['type' => 'received', 'addresses' => $my_wallet]); $transaction_id_matches = false; foreach ($last_received_transactions->data->txs as $transaction) { if ($transaction->txid == $_POST['trans-id']) { $tx_id_matches = true; } // other checks go here } if ($transaction_id_matches) { echo 'transaction ID found'; } else { echo 'transaction ID not found'; } Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547842 Share on other sites More sharing options...
imgrooot Posted June 29, 2017 Author Share Posted June 29, 2017 My code works but so does your code. And I must admit your code is far more simpler and cleaner. I will use your example. Thanks. Quote Link to comment https://forums.phpfreaks.com/topic/304227-how-to-access-multiple-json-arrays-with-single-variable/#findComment-1547850 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.