0 レビュー
0 回答
関数のリファクタリング-PHP
この形式のオブジェクトのこの2つの配列があります:
$billsA = [{
"key": "59",
"amount": 81,
"name": "CustomerA",
"invoice_number": "10150"
}, ...];
$billsB = [{
"key": "59",
"amount": 120,
"name": "CustomerA",
"invoice_number": "10150"
}, ...];
key
オブジェクトに基づいてこれら2つの配列を比較しようとしています。この関数は、オブジェクトの配列数が約700の場合は正常に機能しますが、大きなデータでは奇妙な動作をします(つまり、不正確な結果を返します)。総当たり攻撃以外にこの関数を書く方法は他にありますか?他の方法は考えられません:(
public function compareBills(array $ billsA、array $ billsB):array
{{
$ invoiceData = [];
foreach($ billsA as $ bill _ key => $ billA){
$ matchedData = [];
foreach($ billsB as $ billB){
if($ billA ['key'] === $ billB ['key']){
if(($ billB ['amount'] === $ billA ['amount'])&&(strcasecmp($ billB ['name']、$ billA ['name'])== 0)){
//一致するものを削除します
unset($ billsA [$ bill _ key]);
} そうしないと {
$ matchedData ['invoice_number'] = $ billB ['invoice_number'];
$ matchedData ['amount'] =($ billA ['amount']!== $ billB ['amount'])? $ billB ['amount']:'';
$ matchedData ['name'] =(strcasecmp($ billB ['name']、$ billA ['name'])!= 0)? $ billA ['name']:'';
$ matchedData ['status']='異なる';
$ invoiceData [] = $ matchedData;
unset($ billsA [$ bill _ key]);
}
}
}
}
foreach($ billsA as $ unmatchedData){
$ invoiceData [] = [
'amount' => $ unmatchedData ['amount']、
'name' => $ unmatchedData ['name']、
'key' => $ unmatchedData ['key']、
'invoice_number' => $ unmatchedData ['invoice_number']、
'ステータス'=>'欠落'、
];
}
$invoiceDataを返します。
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。