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
erster Array ist eine regelmäßige Anordnung bestellt, so
$list = [ 0 => ['id' => 'a', 'value' => 2], 1 => ['id' => 'b', 'value' => 4], // etc ];
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?
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
Ich habe ein Beispiel gemacht - https://eval.in/594572 – splash58
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