第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

CSV 到關(guān)聯(lián)數(shù)組(一列作為鍵,另一列作為值)

CSV 到關(guān)聯(lián)數(shù)組(一列作為鍵,另一列作為值)

PHP
元芳怎么了 2023-05-12 15:34:18
我需要將 CSV 文件轉(zhuǎn)換為關(guān)聯(lián)數(shù)組,使用一列作為鍵,另一列作為值。例如,我有這個(gè):Application,Warehouse,Item,UPC,MFUSA Item No.,"PRODUCT DESCR1","PRODUCT DESCR2",Warehouse ID,QtyINVENTORY:,Muscle Foods USA,1st STEP B12 LIQUID 16oz,673131100064,8890004,1st STEP B12 LIQUID 16oz,CHERRY CHARGE,11,29INVENTORY:,Muscle Foods USA,1st STEP B12 LIQUID 16oz,673131100316,8890007,1st STEP B12 LIQUID 16oz,TROPICAL BLAST,11,26INVENTORY:,Muscle Foods USA,1st STEP B12 LIQUID 16oz,673131100064,8890004,1st STEP B12 LIQUID 16oz,CHERRY CHARGE,12,6我必須使用該列UPC作為鍵和Qty值,以便數(shù)組看起來(lái)像..array(    '673131100064' => '29',    '673131100316 => '26',    '673131100064' => '6',);我已經(jīng)嘗試了在谷歌和這里找到的幾種解決方案,但沒(méi)有一個(gè)接近我需要實(shí)現(xiàn)的目標(biāo)。這個(gè)問(wèn)題是類似的,但它是用 Python 編寫(xiě)的。對(duì)不起,我對(duì) PHP 的了解很少。你能指導(dǎo)我走向正確的方向嗎?
查看完整描述

3 回答

?

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

使用array_map您可以解析 csv 數(shù)據(jù)并根據(jù)需要使用數(shù)組。例子:


// Parsing the data in csv file

$csv = array_map('str_getcsv', file('path/file.csv'));


/*At this point you already have an array with the data but

 * the first row is the header row in your csv file */


//remove header row

array_shift($csv);


$data = [];


//Walk the array and add the needed data into some another array

array_walk($csv, function($row) use (&$data) {

    $data[$row[3]] = $row[8];

});

就是這樣。


但是,您作為示例顯示的數(shù)據(jù)具有重復(fù)的 UPC。如果您想要一個(gè)具有結(jié)構(gòu)的數(shù)組,您將覆蓋一些數(shù)據(jù)'UPC' => 'Qty'。數(shù)組中不能有重復(fù)的鍵。


如果您正在尋找的是獲取每個(gè) UPC 的總數(shù)量,那么如果 UPC 密鑰已經(jīng)存在,您只需將現(xiàn)有的數(shù)量添加到新的數(shù)量。


// Parsing the data in csv file

$csv = array_map('str_getcsv', file('file.csv'));


//remove header row

array_shift($csv);


$data = [];


//Walk the array and add the needed data into another array

array_walk($csv, function($row) use (&$data) {


    $data[$row[3]] = ($data[$row[3]] ? $data[$row[3]] + (int) $row[8] : (int) $row[8]);

});

或者更長(zhǎng)但更清晰。


//Walk the array and add the needed data into another array

array_walk($csv, function($row) use (&$data) {


    if(!empty($data[$row[3]]))

    {

        $data[$row[3]] += (int) $row[8];

    }

    else {

        $data[$row[3]] = (int) $row[8];

    }

});


查看完整回答
反對(duì) 回復(fù) 2023-05-12
?

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

下面代碼注釋中的解釋


$array = [];

// Open file "$file" and checking that it is not empty

if (($handle = fopen($file, "r")) !== false) {

    // loop on each csv line, stopping at end of file

    while (($data = fgetcsv($handle)) !== false) {

        // Excluding header row & checking data is not empty

        if ($data[0] !== 'Application' && !empty($data[0])) {

               // fgetcsv returns an array, on your example UPC is on key 3 and Qty on key 9

               $array[] = [$data[3] => $data[9]];

        }

     }

     fclose($handle);

 }


 return $array;

這里的鍵是硬編碼的,但也許你有辦法動(dòng)態(tài)地放置它,這取決于你的代碼和工作流程。這只是一個(gè)簡(jiǎn)單的(我希望)演示。


查看完整回答
反對(duì) 回復(fù) 2023-05-12
?

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

我使用SplfileObject進(jìn)行閱讀。然后第一行用作所有值的鍵。帶有列名的array_column現(xiàn)在可以用于所需的結(jié)果。

$csv = new SplFileObject('datei.csv');


$csv->setFlags(SplFileObject::READ_CSV?

? | SplFileObject::SKIP_EMPTY?

? | SplFileObject::READ_AHEAD?

? | SplFileObject::DROP_NEW_LINE

);


//Combine first row as key with values

$csvArr = [];

foreach($csv as $key => $row){

? if($key === 0) $firstRow = $row;

? else $csvArr[] = array_combine($firstRow,$row);

}


$arrQty = array_column($csvArr,'Qty','UPC');


查看完整回答
反對(duì) 回復(fù) 2023-05-12
  • 3 回答
  • 0 關(guān)注
  • 162 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)