Reputation: 533
I have this JSON.
[{"transaction_code":"NKO27E93OU","transaction_timestamp":"20191124215327","transaction_date":"24-Nov-2019","transaction_time":"09:53 PM","transaction_amount":"1.00","transaction_account":"1235688jose","transactor_number":"254704476967","transactor_fname":"JOSPHAT","transactor_mname":"GITIRA","transactor_lname":""},{"transaction_code":"NL20DG5S4E","transaction_timestamp":"20191202124826","transaction_date":"02-Dec-2019","transaction_time":"12:48 PM","transaction_amount":"10.00","transaction_account":"s84d","transactor_number":"254704476967","transactor_fname":"JOSPHAT","transactor_mname":"GITIRA","transactor_lname":""}]
I want to return a unique array with a specific transaction code. Say if transaction code is NL20DG5S4E, then return the whole array. For now I can only access elements using this code.
$pc = json_decode($paymentdata, true);
// foreach($pc as $p){
// echo $p['transaction_code'].'\n';
// }
$array = $pc[6]['transaction_code'];
return $array;
Upvotes: 0
Views: 119
Reputation: 975
you can use array_filter
to solve this.
$pc = json_decode($array, true);
$result = array_filter($pc, function ($transaction) {
return $transaction['transaction_code'] === 'NKO27E93OU';
});
echo $result[0];
Upvotes: 2
Reputation: 7703
Direct access via key "NL20DG5S4E" is possible if array_column is used.
$pc = json_decode($paymentdata, true);
$arrTrCode = array_column($pc,null,'transaction_code')['NL20DG5S4E'];
/* or
$arrWithKeys = array_column($pc,null,'transaction_code');
$arrTrCode = $arrWithKeys['NL20DG5S4E'];
*/
echo '<pre>';
var_export($arrTrCode);
Output:
array (
'transaction_code' => 'NL20DG5S4E',
'transaction_timestamp' => '20191202124826',
'transaction_date' => '02-Dec-2019',
'transaction_time' => '12:48 PM',
'transaction_amount' => '10.00',
'transaction_account' => 's84d',
'transactor_number' => '254704476967',
'transactor_fname' => 'JOSPHAT',
'transactor_mname' => 'GITIRA',
'transactor_lname' => '',
)
Upvotes: 3
Reputation: 713
You can use array_filter
method to check the value of your specific key like:
$pc = json_decode($paymentdata, true);
$code = 'NL20DG5S4E';
$result = array_filter($pc, function($val) use($code){
return $val['transaction_code'] == $code;
});
Or if you are using laravel >= 5.5
then you can get it easily using collection
$pc = json_decode($paymentdata, true);
$collection = collect($pc);
$result = $collection->firstWhere('transaction_code', $code);
here is the link
Upvotes: 2
Reputation: 17805
Use a simple foreach loop to loop through your data and return the array once the transaction value is found.
<?php
$paymentdata = '[{"transaction_code":"NKO27E93OU","transaction_timestamp":"20191124215327","transaction_date":"24-Nov-2019","transaction_time":"09:53 PM","transaction_amount":"1.00","transaction_account":"1235688jose","transactor_number":"254704476967","transactor_fname":"JOSPHAT","transactor_mname":"GITIRA","transactor_lname":""},{"transaction_code":"NL20DG5S4E","transaction_timestamp":"20191202124826","transaction_date":"02-Dec-2019","transaction_time":"12:48 PM","transaction_amount":"10.00","transaction_account":"s84d","transactor_number":"254704476967","transactor_fname":"JOSPHAT","transactor_mname":"GITIRA","transactor_lname":""}]';
$pc = json_decode($paymentdata, true);
function returnAllInfo($pc,$transaction_code){
foreach($pc as $data){
if($data['transaction_code'] === $transaction_code) return $data;
}
return [];
}
print_r(returnAllInfo($pc,'NL20DG5S4E'));
Demo: https://3v4l.org/iVcb4
Upvotes: 3
Reputation: 60
Below piece of code can help you with what you are looking.
<?php
$pc = json_decode($paymentdata, true);
$arr = [];
foreach($pc as $key => $val)
{
$arr[$val]['transaction_code'] = $val;
}
return $arr;
?>
Upvotes: 0