PHP循环数组从另一个数组更新值

时间:2014-12-18 01:26:25

标签: php arrays csv bigcommerce

我有一个从.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。我想循环遍历另一个数组并根据.CSV数组中的Inventory_Level更新Inventory_Level。两个数组之间的唯一值是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";
    }
}

而不是echo“$ product-&gt; 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

1 个答案:

答案 0 :(得分:1)

假设阵列结构正确,您可以执行以下操作。请注意foreach声明中的&,这可确保$product是对$products数组中实际值的引用,而不是副本。

foreach ($products as &$product) {
    foreach ($csv as $row) {
        if ($product->sku == $row['sku']) {
            $product->inventory_level = $csv['inventory_value'];
        }
    }
}

请注意我没有使用过BigCommerce,所以我不确定其返回数据的结构,但这应该给你一个大概的想法。