頂層的產品數組是$csv. 在下面的摘錄中,數字 [584],[585] 代表下一個數組級別$product=>$data_col如下所示: [584] => Array ( [No_] => II14511 [Manufacturer ID] => CLT-M504S [Description] => SAM CON CLT-M504S [LQ Price] => 120.00000000000000000000 [Retail Price Incl_ GST] => 171.60000000000000000000 [AvailableQty] => 0.00000000000000000000 [Rocklea] => 0.00000000000000000000 [Sydney] => [Net Weight] => 0.50000000000000000000 [Item Category Code] => SAM [Product Group Code] => CON [Minor Category 1] => TONER [Minor Category 2] => # [Vendor Name] => Samsung [Vendor URL] => www.samsung.com.au [Item URL] => [Warranty] => [Dimension] => [EAN Barcode] => 8806085031999 [Description1] => Samsung CLT-M504S, SEE toner for CLP-415/ CLX-4195 Series LBP & MFP - Magenta Toner 1800 pages<br /> [Image] => https://auscompcomputers.com/uploads/image/SAM-CON-CLT-M504S.jpg ) [585] => Array ( [No_] => II14772 [Manufacturer ID] => DK-22205 [Description] => BRO CON LABELROLL-DK-22205 [LQ Price] => 25.00000000000000000000 [Retail Price Incl_ GST] => 35.75000000000000000000 [AvailableQty] => 0.00000000000000000000 [Rocklea] => 0.00000000000000000000 [Sydney] => 0.00000000000000000000 [Net Weight] => 0.50000000000000000000 [Item Category Code] => BRO [Product Group Code] => CON [Minor Category 1] => CON-LABEL-ROLL [Minor Category 2] => # [Vendor Name] => Brother )因此,我有一個具有結構的數組$csv as $product as $data_col => $value但是,我想$data_col參考通緝列表選擇性地刪除一些數組$data_col,我將其稱為$wanted_data_cols.它似乎不會導致整個陣列發生變化。您能否建議如何進行這項工作,或者如果您覺得您有一個可以實現相同目標的卓越解決方案,我會接受。
1 回答

牛魔王的故事
TA貢獻1830條經驗 獲得超3個贊
您現有代碼的問題在于,當您嘗試使用unset()該值時,您使用的是實際值而不是索引來刪除該項目 - 這是行不通的。
要修復原始代碼 -
foreach ($csv as $key => $product){
foreach ($product as $column => $data_col){
if(!in_array($column,$wanted_data_cols)){
unset($csv[$key][$column]);
}
}
}
另一種方法是使用array_intersect_key(),這允許您只保留第二個數組中的鍵。但要做到這一點 - 您需要array_flip()在要保留的字段上使用,以便字段名稱最終成為鍵......
$wanted_data_cols = array_flip($wanted_data_cols);
foreach ($csv as $key => $product){
$csv[$key] = array_intersect_key($product, $wanted_data_cols);
}
最后一個建議是,如果可能的話,這應該在加載數據時完成,這樣可以節省在內存中保存無用數據并消除進行第二次循環的需要。
- 1 回答
- 0 關注
- 158 瀏覽
添加回答
舉報
0/150
提交
取消