Z pliku csv chcę wyciągnąć 2 kolumny z nagłówkami sku i images. Ale chcę pominąć wiersze, w których sku lub images nie mają wartości lub są puste. Oto mój kod:

$lines   = explode("\n", file_get_contents('../processed/MagentoExport.csv'));
$headers = str_getcsv(array_shift($lines));
foreach ($lines as $line) {
    foreach (str_getcsv($line) as $key => $field) {
        if ($headers[$key]['sku'] != '' || $headers[$key]['image'] != '') {
            if ($headers[$key] == 'sku') {
                echo str_replace(",", ";", $field).":";             
            }
            if ($headers[$key] == 'image') {
                echo str_replace(",", ";", $field)."<br>";
            }       
        }   
    }   
}

Jak mogę pominąć wiersze z pustymi komórkami image? Z góry dziękuję

-2
Muntashir Are Rahi 31 marzec 2020, 14:13

3 odpowiedzi

Najlepsza odpowiedź

Twój kod wydaje się bardzo zagmatwany. Jeśli dobrze rozumiem, co próbujesz zrobić, napisałbym coś takiego:

if ( false === $handle = fopen('../processed/MagentoExport.csv', 'r') )
    throw new Exception('File open failed.');

$headers = fgetcsv($handle);

while ( false !== $fields = fgetcsv($handle) ) {
    $fields = array_combine($headers, $fields);

    if ( empty($fields['sku']) || empty($fields['image']) )
        continue;

    echo $fields['sku'], ':', $fields['image'], '<br>';
}

fclose($handle);
3
Casimir et Hippolyte 31 marzec 2020, 11:37

Aby pominąć drukowanie, możesz zrobić:

if ($headers[$key] == 'image') {
   if (!empty($field)) { 
        echo str_replace(",", ";", $field)."<br>";
   }
}
0
adrianp 31 marzec 2020, 11:51

Dlaczego w teście masz dwa razy takie same warunki

if ($headers[$key]['sku'] != '' || $headers[$key]['sku'] != '')

Zastąpiony przez

if ($headers[$key]['sku'] != '' || $headers[$key]['image'] != '')
0
threeside 31 marzec 2020, 11:25