array_combine und CSV -> Warning

evoleena

Erfahrenes Mitglied
Hallo ihrs!

Hab da mal ein kleines Problem
Ich benutze array_combine um ein Key-Array und ein Daten-Array zusammenzufügen.
Nun bekomme ich aber die Warnung, dass das Daten-Array kein Array wäre.

Warning: array_combine() expects parameter 2 to be array, boolean given in ...

Dabei benutze ich für das Daten-Array vorher fgetcsv und da bekomm ich doch ein Array zurück.

Hat jemand eine Idee wie ich auch noch die Warnmeldung wegbekomme? Die da stehen zu lassen finde ich nicht gerad praktisch.

PHP:
$daten = fgetcsv($datei,1000);
$array = array_combine($keys,$daten);

Ich hoffe ihr könnte mir helfen.
Danke schon mal

Gruss Evo
 
Bau eine Kontrolle ein, die vergleicht:
Wenn Datensatz anzahl Array1 == anzahl Array1 dann zusammenfügen ansonsten nicht...
 
Zuletzt bearbeitet:
Bau eine Kontrolle ein, die vergleicht:
Wenn Datensatz anzahl Array1 == anzahl Array1 dann zusammenfügen ansonsten nicht...

Raff ich net, was soll das bringen?
Dann fügt er ja nie die Arrays zusammen.

Das Problem ist doch es ist ein Array und er bringt trotzdem die Warnung das es angeblich ein Boolean sein soll!
 
[phpf]array_combine[/phpf] fügt auch keine Arrays zusammen, sondern erstellt ein neues Array, wobei das erste für die Schlüssel und das zweite für die Werte verwendet wird.

Suchst du vielleicht [phpf]array_merge[/phpf]?

Und wenn ein boolean zurückgegeben wird, dann wird es ein boolean false sein, sprich die Funktion ist fehlgeschlagen.
 
Es wird Zeile für Zeile ausgewertet,
Es entsteht ein Fehler wenn Arrays zusammengefügt werden sollen, welche unterschiedlich viele Datenfelder haben...

z.b.
$fieldnames = array("name", "dbdatum");
$daten = array("test", "12.1.1982","...");
oder letze zeile und leer.

Er wirft nen Fehler aus:

Du kannst es einbauen und es läuft möglicherweise und du vermeidest somit auch andere mögliche Fehler oder du läßt es sein....
 
Felix Jacobi:
Er nimmt zeile nr 1 um die bezeichnung der Felder zu bekommen.
Alle weiteren Zeilen werden den Feldnamen zugeordnet,
So entsteht ein assoziatives array.
 
Ah, mein Fehler...
Ich ging von einem reinen Daten CSV aus, die mit einem Array aus anderer Quelle vereinigt werden sollten.
 
Also nochmal
Ich hole mir zeile 1 meiner CSV Datei und erzeuge ein Keys array -> klappt
PHP:
$daten = fgetcsv($datei,2000);
$keys = $daten;

Dann hole ich alle weiteren Zeilen -> klappt auch
PHP:
$daten = fgetcsv($datei,1000);

die Ausgabe mit print_r($daten) sieht so z.B. aus, wie man sieht ist es ein Array

Array ( [0] => 0 [1] => - [2] => [10.100.40.4] [3] => [00-00-74-C3-2C-B2] [4] => [MP 2000] [5] => [NRG MP 2000(Poststelle)] [6] => [] [7] => [11210] [8] => [11210] [9] => 619 [10] => 619 [11] => - [12] => 619 [13] => - [14] => 619 [15] => 619 [16] => 0 [17] => - [18] => - [19] => - [20] => - [21] => - [22] => - [23] => - [24] => - [25] => - [26] => 0 [27] => 0 [28] => 0 [29] => - [30] => - [31] => - [32] => - [33] => - [34] => - [35] => - [36] => - [37] => - [38] => 0 [39] => 0 [40] => 0 [41] => 0 [42] => - [43] => - [44] => - [45] => 0 [46] => 0 [47] => 0 [48] => - [49] => - [50] => - [51] => 2 [52] => - [53] => )


und zum Schluss baue ich aus den beiden Arrays ein neues
PHP:
$array = array_combine($keys,$daten);

klappt alles wunderbar bis auf, dass das Warning kommt!

Warning: array_combine() expects parameter 2 to be array, boolean given in ...

EDIT:
Ach er zeigt mir an das bool(false) ist!
@Felix Jacobi du meintest das die Funktion dann fehlgeschlagen ist, aber das Array was ich im endefekt durch combine haben wollte bekomme ich!!
 
Zuletzt bearbeitet:
So wie du es jetzt geschrieben hast, macht es aber auch nur dann sinn, wenn du nur 2 zeilen einließt.
Ansonsten würde jedesmal der inhalt innerhalb $array überschrieben...

also eher:
$array[] = array_combine($keys,$daten);

dann wandel das ganze so um:
PHP:
if(count($keys) == count($daten){
   $array = array_combine($keys,$daten);
}
und es kommt kein fehler mehr...
 
Zurück