PHP中如何根据唯一transaction_code返回对应JSON解析数组?
根据transaction_code查找对应交易数组的PHP实现
你目前通过固定索引访问数组的方式确实不够灵活,要是交易数据有变动,索引就失效了。针对你的需求,我给你两种实用的实现方法,都能精准根据指定的transaction_code返回对应的完整交易数组:
方法一:foreach循环遍历(直观易懂)
这种方法逻辑清晰,适合快速理解:
// 你的原始JSON数据 $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":""}]'; $targetCode = 'NL20DG5S4E'; // 你要查找的目标transaction_code $pc = json_decode($paymentdata, true); $matchedTransaction = null; // 遍历每一笔交易 foreach ($pc as $transaction) { // 严格匹配transaction_code if ($transaction['transaction_code'] === $targetCode) { $matchedTransaction = $transaction; break; // 找到后立即停止循环,节省资源 } } // 输出结果:找到的话是完整交易数组,没找到则是null var_dump($matchedTransaction);
核心思路就是逐个检查每笔交易的transaction_code,一旦匹配就把该交易的完整数组存下来,然后跳出循环——毕竟交易码一般是唯一的,不需要继续遍历剩下的数据。
方法二:用array_filter函数(简洁写法)
如果你偏爱更紧凑的代码,PHP的array_filter函数可以帮你快速过滤出目标数据:
$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":""}]'; $targetCode = 'NL20DG5S4E'; $pc = json_decode($paymentdata, true); // 过滤数组,只保留transaction_code匹配的项 $filteredTransactions = array_filter($pc, function($item) use ($targetCode) { return $item['transaction_code'] === $targetCode; }); // 取过滤后的第一个结果(因为交易码唯一,最多一个匹配项) $matchedTransaction = !empty($filteredTransactions) ? reset($filteredTransactions) : null; var_dump($matchedTransaction);
array_filter会帮你遍历数组,把符合条件的元素留下来。最后用reset拿到第一个匹配的交易数组就好,如果没有匹配项就返回null。
小提示:
- 一定要用
===进行严格比较,避免因为类型差异(比如字符串和数字)导致的误匹配 - 如果你的交易数据量很大,foreach循环的效率会更高,因为找到目标后就能立刻停止遍历
- 要是存在重复的
transaction_code,可以把$matchedTransaction改成数组,把所有匹配项都存进去,而不是只取第一个
内容的提问来源于stack exchange,提问作者davidkihara
相关产品推荐
相关产品推荐

