davidkihara
davidkihara

Reputation: 533

How do I return an array with a unique key?

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

Answers (5)

Yohann Daniel Carter
Yohann Daniel Carter

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

jspit
jspit

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

Vibha Chosla
Vibha Chosla

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

nice_dev
nice_dev

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

Gaurav Dhiman
Gaurav Dhiman

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

Related Questions