У меня есть массив, созданный из .CSV
function readCSV($csvFile){
$file_handle = fopen($csvFile, 'r');
while (!feof($file_handle) ) {
$line_of_text[] = fgetcsv($file_handle, 1024);
}
fclose($file_handle);
return $line_of_text;
}
// Set path to CSV file
$csvFile = 'lmco_inventory.csv';
$csv = readCSV($csvFile);
Первый столбец — SKU, а второй — Inventory_Level. Я хочу перебрать другой массив и обновить Inventory_Level на основе Inventory_Level из массива .CSV. Уникальным значением между двумя массивами является поле SKU.
Вот мой другой массив:
for($i = 1 ; $i <= 9 ; $i++){
$filter = array('page' => $i, 'limit' => 250);
$products = Bigcommerce::getProducts($filter);
foreach ($products as $product) {
echo "$product->id\n";
}
}
Вместо эха «$ product-> id \ n»; Я хочу выровнять оба массива, где SKU = SKU, а затем обновить Inventory_Level из .CSV в массив $ products.
Надеюсь, что это имеет смысл.
РЕДАКТИРОВАТЬ
Sample .CSV data
SKU | Inventory
1 5
2 1
3 7
4 21
5 500
In plain english this is what I want:
foreach ($products as $product) {
//find where $product->sku = $csv->sku
//then $product->inventory_level gets the value of $csv->inventory_value
//loop through all objects in $product array until complete
//done
Предполагая, что массивы правильно структурированы, вы можете сделать следующее. Обратите внимание на &
в объявлении foreach это гарантирует, что $product
является ссылкой на фактическое значение в $products
массив вместо копии.
foreach ($products as &$product) {
foreach ($csv as $row) {
if ($product->sku == $row['sku']) {
$product->inventory_level = $csv['inventory_value'];
}
}
}
Обратите внимание, что я не использовал BigCommerce, поэтому я не уверен в структуре возвращаемых данных, но это должно дать вам общее представление.
Других решений пока нет …