Fortlaufennummer ermitteln

fredolin

Erfahrenes Mitglied
Hey,

ich versuche gerade mir über ein PHP Script zu schreiben, das ich aus eine erstelen Artikelnummer.csv die freien / fehlenden Artikelnr anzeigen lassen soll.
Doch es ist schwer als ich mir selber eingestehe. Ich suche nun nach Denkanstöße bzw. Rat wie man so was schreiben kann.

Hier ist ein Beispiel wie die CSV aussieht.

Beispiel
A​
1
2 124335
3 124336
4 124337
5 124338
6 124339
7 124345
8 124346
9 124347
10 124349
11 124355
12 124358
13 124359

Wie kann ich in dieser fortlaufenden Zahlenliste die fehlenden Nummern ermitteln? Kann mir da jemand helfen oder einen Denkanstoß geben.

Ich sag Danke an alle die hier mir nützliche Informationen geben


Danke, Fredolin
 
Spontan würde mir so etwas hier einfallen (ungetestet!):
PHP:
# Trennzeichen (e.g. ein Leerzeichen, Tabulator, Komma, Semikolon)
$delimiter = ' ';
# Datei als CSV lesen
$data = array_map( function ( $item ) use ( $delimiter ) {
  return str_getcsv( $item, $delimiter );
}, file( 'Artikelnummer.csv' ) );

# Daten aus der zweiten Spalte extrahieren
$numbers = array_column( $data, 1 );
# Werte in Integer umwandeln
$numbers = array_map( function( $item ) {
  return (int) $item;
}, $numbers );

# Artikelnummern sortieren
sort( $numbers );
# höchste vorhandene Artikelnummer
$highest = end( $numbers );
# niedrigste vorhandene Artikelnummer
$lowest = reset( $numbers );

# Zahlen von 1 bis zur höchsten vorhandenen Artikelnummer generieren
$possible = range( 1, $highest );
# Artikelnummern ermitteln, die noch nicht vorhanden sind
$available = array_diff( $possible, $numbers );

print_r( $available );
 
Hey einfach nur crack,

leider funktioniert dein Script nicht so wie es sollte.
Bekomme auf dem Monitor nur diese Meldung:
Array ( [0] => 1 [1] => 0 )

Was könnte die Ursache sein??

Gruss fredolin
 
PHP:
<?php
   function fortlaufend_nummer($min, $max)
   {
      $ergebnis = array();

      for ($i = $min; $i <= $max; $i++)
      {
         $ergebnis[] = $i;
      }

      return $ergebnis;
   }

   $Get_CSV_1 = array(3,5,7,8,5690,1457,999,8888);

   $Get_CSV_2 = fortlaufend_nummer(min($Get_CSV_1),max($Get_CSV_1));

   $Get_CSV_3 = array_diff($Get_CSV_2, $Get_CSV_1);

   echo '<pre>';
   print_r($Get_CSV_3);
   echo '</pre>';
?>
 
Zurück