2016-07-07 4 views
0

Ich habe einige Daten auf einer Seite mit mehreren Zeilen und Spalten. Ich suche speziell eine ganze Spalte und lege sie in ein anderes Array.array_column gibt 0 Ergebnisse von einem Array mit Daten zurück

Ich verwende codeigniter und php. Der var-Dump auf meiner Seite zeigt, dass die Daten in ihrem RAW-Array gut ankommen. Aber sobald ich versuche, ein zweites Array auf der Seite zu erstellen, gibt das Array 0 Ergebnisse zurück.

Hier ist der var_dump für das ursprüngliche Array. Für Ihre Gesundheit, krank nur Post die erste Sequenz.

array (7) {[0] => Objekt (stdClass) # 19 (7) {[ "id"] => string (1) "1"
[ "serial_number"] => string (9) "Batterie 1" ["Batterietyp"] => Zeichenkette (4) "Lipo" ["cell_count"] => Zeichenkette (1) "4" ["Kapazität"] => Zeichenkette (4) "16.8" [ "date_submitted"] => string (19) "0000-00-00 00:00:00" [ "user_id_submitted"] => string (0) ""} [1] =>

Hier ist die array_column Funktion

<?php 
    $serialnumber = array_column($batteryDb, "serial_number"); 
    var_dump($serialnumber); 
?> 

und hier ist das Ergebnis:

array(0) { } 
+0

Nun, scheint, dass $ batteryDb nicht die richtige Struktur hat. Es muss ein Array von Arrays sein. Wären Sie so nett, die Ausgabe von 'var_dump ($ batteryDb);' zu Ihrem ursprünglichen Beitrag hinzuzufügen - vielleicht nur zwei Elemente. –

+0

@JustinSellers Bearbeiten Sie Ihr OP, um Ihre Beispiel-Array-Daten aufzunehmen. – topshot

+1

Ich habe es gerade für Sie aktualisiert. –

Antwort

2

Ok, var_dump($batteryDb); zeigt dies:

array(7) { 
[0] => object(stdClass)#19 (7) {      <----- object !! 
    ["id"]=> string(1) "1" 
    ["serial_number"]=> string(9) "battery 1" 
    ["battery_type"]=> string(4) "Lipo" 
    ["cell_count"]=> string(1) "4" 
    ["capacity"]=> string(4) "16.8" 
    ["date_submitted"]=> string(19) "0000-00-00 00:00:00" 
    ["user_id_submitted"]=> string(0) "" } 
[1] => 

Das Problem ist, dass diese Arraystruktur nicht mit array_column auf PHP5 arbeitet.

Sie haben ein Array von Objekten, aber die Funktion erwartet ein Array von Arrays.

Ein Array von Objekten auf array_column wird nur von PHP7 unterstützt. Referenzierung: https://github.com/php/php-src/blob/PHP-7.0.0/UPGRADING#L626


Die basische Lösung wäre, um Ihre Objekte in Arrays zu aktivieren:

array(7) { 
    [0] => array (7) {        <----- array !! 
     ["id"]=> string(1) "1" 

Sie können das tun mit:

  • $array = (array) $object;
  • $array = get_object_vars($object);
  • , wenn mehrdimensionale: $array = json_decode(json_encode($object), true);

das Probieren Sie:

$batteryDbArray = json_decode(json_encode($batteryDb), true); 

$serial_numbers = array_column($batteryDbArray, 'serial_number'); 
var_dump($serial_numbers); 
+0

ok, also hab ich das mal probiert. es hat dieses Array gerendert (7) {[0] => string (9) "Batterie 1" [1] => string (9) "Batterie 2" [2] => string (9) "Batterie 3" [3] => string (9) "Batterie 5" [4] => string (9) "Batterie 6" [5] => string (9) "Batterie 4" [6] => string (9) "Batterie 7"} –

+0

Nun, um herauszufinden, wie Sie diese in eine Dropdown-Liste einfügen. Haha –

0

Ich denke array_column nur Unterstützung für eine Reihe von Gegenständen in 7.0 hinzugefügt, so dass Sie PHP Upgrade versuchen können, oder eine andere Methode verwenden .

Versuchen array_map:

$serial_numbers = array_map(function($e) { 
    return is_object($e) ? $e->serial_number : $e['serial_number']; 
}, $batteryDb); 

Es gibt noch andere, noch schlimmer, Lösungen, wie die Verwendung von json_encode (json_decode()) oder das Array iterieren stdClass-array Objekte mit get_object_vars oder Gießen Umwandlung, aber ich denke, diese hinzufügen unnötiger Overhead und sind weniger offensichtlich:

$serial_numbers = array_column(json_decode(json_encode($batteryDb), true), 'serial_number')); 
Verwandte Themen