Berikut ialah sampel set data
$all_items = array ( $a1 = array ( name => "item1", description => "item 1", item_key => 123 ), $a2 = array ( name => "item2", description => "item 2", item_key => 456 ), $a3 = array ( name => "item3", description => "item 3", item_key => 789 ) ); $invoice_items = array ( $b1 = array ( item_key => 123, desc => "1item" ), $b2 = array ( item_key => 456, desc => "2item" ), $b3 = array ( item_key => 123, desc => "3item" ), $b4 = array ( item_key => 345, desc => "4item" ), $b5 = array ( item_key => 123, desc => "5item" ), $b6 = array ( item_key => 345, desc => "6item" ), $b7 = array ( item_key => 123, desc => "7item" ) );
Jadi matlamat di sini ialah apabila terdapat item invois yang sepadan dengan item item_key
, saya ingin meletakkan tatasusunan item invois ke dalam tatasusunan baharu. Jadi dalam contoh ini, saya rasa hasil yang saya mahukan adalah seperti ini
Array ( [0] => Array ( [0] => Array ( [name] => item1 [description] => item 1 [item_key] => 123 ), [1] => Array ( [item_key] => 123 [desc] => 1item ), [2] => Array ( [item_key] => 123 [desc] => 3item ), [3] => Array ( [item_key] => 123 [desc] => 5item ), [4] => Array ( [item_key] => 123 [desc] => 7item ) ) [1] => Array ( [0] => Array ( [name] => item2 [description] => item 2 [item_key] => 456 ), [1] => Array ( [item_key] => 456 [desc] => 2item ), ) [2] => Array ( [0] => Array ( [name] => item3 [description] => item 3 [item_key] => 789 ) ) )
Ada cadangan?
Saya telah mencuba hanya membandingkan tatasusunan dan menolak nilai, tetapi saya hanya berakhir dengan tatasusunan yang besar, seperti kembali ke tempat saya bermula. Saya masih baru sedikit dengan PHP dan mungkin tidak biasa dengan beberapa kaedah tatasusunan
Struktur tatasusunan yang terhasil adalah sama seperti yang anda huraikan dalam soalan anda di atas.
Tetapi terdapat percanggahan antara set hasil anda dan ulasan anda "...gabungkan tatasusunan invois_item ke dalam tatasusunan baharu". Tatasusunan hasil anda mempunyai item invois yang dilampirkan, oleh itu kod saya di atas.
Kini, penyelesaian ini mencipta kunci baharu - di sini dipanggil "descs" - tatasusunan dalam item invois di bawah kunci ini:
Memandangkan item_keys dalam entri tatasusunan "descs" ini adalah berlebihan, anda boleh mengalih keluarnya dan hanya membuat tatasusunan rentetan:
Keluaran:
Sila ambil perhatian bahawa tatasusunan input anda semuanya mempunyai pernyataan tugasan dalam pembinaannya ($a1 = ..., $a2 = ..., dsb.). Ini tidak masuk akal melainkan anda memerlukan pembolehubah ini kemudian. Jika ya, pengekodannya dalam cara yang lebih mudah dibaca adalah lebih baik: