 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
24.11.2003, 22:07
|
#1
|
|
TP-Senior
Registriert seit: Mar 2003
Ort: Leipzig
|
unset() und Referenzen
Wie kann ich ein Element eines Arrays, dass ich nur über eine Referenz kenne, löschen?
Ich hab in etwas folgendes
PHP-Code:
$a = array( 'a', 'b', 'c', 'd');
$b = array( &$a[0], &$a[1], &$a[2], &$a[3]);
und möchte nun das Element aus $a, worauf die Referenz $b[xxx] zeigt, löschen. Wie stell ich das an?
Folgendes geht schonmal nicht...
PHP-Code:
echo "<br />a : ";
print_r($a);
echo "<br />b : ";
print_r($b);
echo "<br /><br />";
unset($b[2]);
echo "<br />a : ";
print_r($a);
echo "<br />b : ";
print_r($b);
sondern liefert nur:
a : Array ( [0] => a [1] => b [2] => c [3] => d )
b : Array ( [0] => a [1] => b [2] => c [3] => d )
a : Array ( [0] => a [1] => b [2] => c [3] => d )
b : Array ( [0] => a [1] => b [3] => d )
__________________
[ httpsmog]
"I have not failed. I've just found 10,000 ways that won't work." - Thomas Alva Edison (1847-1931)
|
|
|
24.11.2003, 23:12
|
#2
|
|
Guest
Registriert seit: Aug 2002
|
Du hast wahrscheinlich falsch gedacht, aber soweit ich dich verstanden habe, ist das was du suchst:
PHP-Code:
$a = array( 'a', 'b', 'c', 'd');
$b = array();
$b =& $a;
echo "<br />a : ";
print_r($a);
echo "<br />b : ";
print_r($b);
echo "<br /><br />";
unset($b[2]);
echo "<br />a : ";
print_r($a);
echo "<br />b : ";
print_r($b);
Geändert von Strogij (24.11.2003 um 23:14 Uhr).
|
|
|
24.11.2003, 23:57
|
#3
|
|
TP-Senior
Registriert seit: Mar 2003
Ort: Leipzig
|
leider nicht...
Leider ist es nicht so einfach. Der Code war schon richtig so...
$b enthält nicht die gleichen Elemente wie $a, so dass $b[xx] != $a[xx]. Genaugenommen besteht $b aus Referenzen auf Elemente von $a1 und $a2. Das ist auch der Grund, warum ich nicht direkt auf das Ursprungsarray zugreifen kann, weil ich nicht weiß, wohin meine Referenz in $b nun zeigt....
__________________
[ httpsmog]
"I have not failed. I've just found 10,000 ways that won't work." - Thomas Alva Edison (1847-1931)
|
|
|
24.11.2003, 23:59
|
#4
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
interessante Frage, wo ich glaube, dass es wohl keine lösung dafür gibt
http://at2.php.net/manual/en/function.unset.php
hier der abschnitt mit den referenzen stimmt mich ein wenig pessimistisch.
Ausserdem: In deinem Beispiel wird ja auch nur die Referenzierungsadresse, die in einem eigenen Array sitzt gelöscht.
Somit ist imho der einzig gangbare weg, der, den strogij gepostet hat.
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
25.11.2003, 00:05
|
#5
|
|
TP-Senior
Registriert seit: Mar 2003
Ort: Leipzig
|
Zitat:
Original geschrieben von mike
Ausserdem: In deinem Beispiel wird ja auch nur die Referenzierungsadresse, die in einem eigenen Array sitzt gelöscht.
|
Weiß ich ja. Hab auch geschrieben geschrieben, dass es so nicht geht.
Manual hatte ich auch schon gelesen...
Das ist Mist, dass das nicht geht.  Trotzdem Danke
__________________
[ httpsmog]
"I have not failed. I've just found 10,000 ways that won't work." - Thomas Alva Edison (1847-1931)
|
|
|
25.11.2003, 00:13
|
#6
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
Was noch funktionieren würde, wäre die zelle nicht zu löschen, sondern nur zu leeren.
Würde das ins Konzept passen?
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
25.11.2003, 00:56
|
#7
|
|
TP-Senior
Registriert seit: Mar 2003
Ort: Leipzig
|
mhh, wäre natürlich auch eine möglichkeit... ist im Grunde egal. Jedenfalls muss ich an der Struktur des Skripts was ändern...
__________________
[ httpsmog]
"I have not failed. I've just found 10,000 ways that won't work." - Thomas Alva Edison (1847-1931)
|
|
|
25.11.2003, 01:00
|
#8
|
|
Guest
Registriert seit: Aug 2002
|
Ja das dachte ich auch, aber ansonsten ist sowas in PHP nicht möglich, in einer Programmiersprache wie z.B. C hat man ja die Adresse im Speicher, mit der man arbeiten kann, hier kann man nur den neuen Namen für eine Variable anlegen, die dann diese referenziert und man keine weiteren Möglichkeiten hat als einfach den Wert zu manipulieren.
Aber, was möglich wäre glaube ich ist eine Klasse für dieses Problem. Und zwar hat man danach sein eigenes Array-Typ mit Methoden und Elementen, die sowas möglich machen. Irgend eine Logik hat dieses Verfahren ja, ich werde es mal morgen anschauen, interessiert mich persönlich. Die beiden Arrays haben aber die gleiche Anzahl an Elementen, oder ist es nicht immer der Fall?
|
|
|
25.11.2003, 01:10
|
#9
|
|
TP-Senior
Registriert seit: Mar 2003
Ort: Leipzig
|
Also in meinem konkreten Fall nicht.
Hier mal ein Codeschnippsel...
PHP-Code:
$ug_data = array();
// ...
$users = array();
while( $row = $db->sql_fetchrow($result) )
{
$users[$row['group_id']] = $row;
$ug_data[] = &$users[$row['group_id']];
}
for($i = 0; $i < count($usergroups); $i++)
{
$ug_data[] = &$usergroups[$i];
}
Und später wollte ich dann halt aus den Arrays bestimmte Einträge wieder raushaun...
__________________
[ httpsmog]
"I have not failed. I've just found 10,000 ways that won't work." - Thomas Alva Edison (1847-1931)
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:18 Uhr.
|
 |