2016-06-23 12 views
4

Titel ist schwer zu bekommen, aber im Wesentlichen, was ich versuche zu tun ist, einige Daten aus meiner Datenbank abgerufen und Teile einzufügen davon in zwei Arrays:Erstellen von zwei Arrays, eine 0 indexiert und die andere ID indiziert, mit Referenzen verbinden die beiden

  1. erster Array ist eine regelmäßige Anordnung bestellt, so

    $list = [ 
        0 => ['id' => 'a', 'value' => 2], 
        1 => ['id' => 'b', 'value' => 4], 
        // etc 
    ]; 
    
  2. Und das zweite Array des Objekts eindeutige ID als Schlüssel für das Array verwenden, so

    $map = [ 
        'a' => ['id' => 'a', 'value' => 2], 
        'b' => ['id' => 'b', 'value' => 4], 
        // etc 
    ]; 
    

Allerdings würde ich den eigentlichen Inhalt von $list und $map gerne über Referenz verknüpft werden, so dass, wenn ich eine ändern, wird der andere aktualisiert.

// update `a`'s value 
$map['a']['value'] = 10; 

// will echo "TRUE" 
echo ($list[0]['value'] === 10 ? 'TRUE' : 'FALSE'); 

jedoch der Code Ich verwende funktioniert nicht, und ich kann sehen, warum, aber nicht sicher, was es zu beheben zu tun. Hier

ist einig Pseudo-Code von dem, was Art geschieht in meinem Skript:

<?php 

// Sample data 
$query_result = [ 
    ['id' => 'a', 'other_data' => '...'], 
    ['id' => 'b', 'other_data' => '...'], 
    ['id' => 'c', 'other_data' => '...'], 
    // etc 
]; 

$list = []; 
$map = []; 

foreach ($query_result as $obj) { 
    // Problem is here, $temp_obj gets reassigned, rather than a new variable being created 
    $temp_obj = ['foreign_key' => $obj['id'], 'some_other_data' => 'abc', ]; 

    // Try to have object that is inserted be linked across the two arrays 
    $list[] = &$temp_obj; 
    $map[$obj['id']] = &$temp_obj; 
} 

// Both will just contain my 3 copies of the last item from the query, 
// in this case, `['id' => 'c', 'other_data' => '...'],` 
var_dump($list); 
var_dump($map); 

Dies ist eine sehr vereinfachte Version von dem, was los ist, aber im Grunde ist es das gleiche.

Also, wie ich meine Objekte durchlaufen und sie zu zwei Arrays hinzufügen, $list und $map, wie kann ich diese Objekte hinzufügen, so dass sie Verknüpfungen zueinander sind?

+3

Nun, Sie wollen nur diese beiden Linien ändern: '$ list [] = & $ temp_obj; $ map [$ obj ['id']] = & $ temp_obj; 'zu:' $ map [$ obj ['id']] = $ temp_obj; $ list [] = & $ map [$ obj ['id']]; ' – Rizier123

+1

Ich habe ein Beispiel gemacht - https://eval.in/594572 – splash58

+0

Danke, das habe ich später ähnlich gedacht, aber anders herum , also $ map ['a'] = & $ list [count ($ list) - 1]; 'und hatte damit Probleme. Viel einfacher, '$ list [] = & $ map ['a']' zu machen, da ich die ID zur Hand habe. – romellem

Antwort

0

löschen Sie einfach die & im Code wie folgt aus:

$list[] = $temp_obj; 
$map[$obj['id']] = $temp_obj;