2 Arrays die sich Gegenseitig auslöschen....

Darian

Erfahrenes Mitglied
Hallo Leute,

ich dachte zuerst des kann ja kein Problem sein, aber nach langem herum probieren habe ich die richtige Lösung noch nicht gefunden.

Ich habe einen Array wo die Feldnamen als Key stehen, und einen Array wo die Primarykeys als value stehen.

Ich möchte die Primary Keys jetzt aus dem Feldnamen Array löschen, weil die Primary Keys ja von der Datenbank vergeben werden.

PHP:
array(6) { ["id"]=>  NULL ["name"]=>  NULL ["date"]=>  NULL ["mail"]=>  NULL ["betreff"]=>  NULL ["text"]=>  NULL } 
array(1) { [0]=>  string(2) "id" }

Möchte jetzt aus dem ersten die id weg haben.

Kurz noch eine Frage ob sich der aufwand überhaupt lohnt. Wie oft kommt es vor, wenn überhaupt dass mehrere PrimaryKeys in einer Tabelle sind? Gibt es das überhaupt? (bin da da selber nicht so sicher, dachte aber ich mache es bei AdoDB so aussieht als würde es)

Ich habe schon einges mit zwei foreach probiert, und auch mit array_div und array_diff_assoc.

Bei der Möglichkeit mit foreach, hat mir das unset dann den ganzen array gelöscht.

unset ist doch auch dafür gemacht einfach nur ein einzelnes Element aus einem Array zu löschen oder?

Leider habe ich das gewünschte Ergebnis noch nicht erreicht.

Viele Fragen, und ich hoffe dass sich jemand die Arbeit macht mir da ein wenig weiter zu helfen.

lg und danke für eventuelle Infos
Darian
 
Wenn du _nur_ ID löschen willst:
PHP:
$arr = array( 'id' => NULL, 'name' => NULL, 'date' => NULL, 'mail' => NULL, 'betreff' => NULL, 'text' => NULL );

unset( $arr['id'] );

echo '<pre>';
var_dump( $arr );
echo '</pre>';
var_dump:
Code:
array(5) {
  ["name"]=>
  NULL
  ["date"]=>
  NULL
  ["mail"]=>
  NULL
  ["betreff"]=>
  NULL
  ["text"]=>
  NULL
}
 
Wie oft kommt es vor, wenn überhaupt dass mehrere PrimaryKeys in einer Tabelle sind?
Gar nicht. Eine Tabelle kann nur einen Primary Key haben. Sollten mehre Attribute in einem Primary Key zusammen gefasst sein, spricht man von einem gesplitteten Primary Key. Hierbei ist allerding darauf zu achten, dass das Redundanz verhalten anders ist, da so beide (oder halt noch mehr) Attribute zusammen eindeutig sein müssen und nicht blos eins.
 
Du könntest auch hingehen und das Array, welches die Felder enthält, die entfernt werden sollen umdrehen. Also, dass das zu entfernende Feld als Key steht. Dann könntest du ganz einfach mit array_diff() arbeiten.

PHP:
$arr = array('id' => 1, 'name' => 'max', ....);
$arr1 = array('id' => 0);

$arr = array_diff($arr, $arr1);

Das andere sieht evt schöner aus.^^ Was man nun eher in der Paxis anwenden würde... keine Ahnung
 
Hallo Leute,

ich habe nachdem jetzt einfach mit unset den primarykey gelöscht, und hoffe dass in dem Array von AdoDB nicht aufeinmal zwei Primary Keys auftauchen.

@fanste
Das mit dem Umdrehen funktioniert nicht, weil dann die Namen als Key sind, und somit hatte ich Probleme. Geht nur wenn es im Wert ist. Ging zumindest nicht.
Und den anderen kann ich nicht umdrehen, weil NULL steht, und es String oder int sein muß.

@Loomes
Stimmt, aber ich möchte doch dass es automatisch die PK löscht, und darum brauchte ich mehr wie nur id zu löschen.

@Da_Chris
Mit foreache habe ich auch viel herum gewerkelt, aber es ging noch nicht so ganz. Weiß jetzt auch nicht warum.

Für den Augenblick ist es gelöst, und vielleicht kann man es ja in einer anderen Version nocheinmal besser machen.

Danke für eure Infos.

Darian
 
Hallo Leute,

ja sorry, normalerweise poste ich immer die Lösung, aber ich dachte dieses mal wäre es keine Rede wert.

Meine Lösung:

PHP:
unset($field_array[$pk_array[0]]);

Ich habe einfach darauf verzichtet dass alle vom pk array gelöscht werden, und anhand der Information von hubbi es so gemacht.

Ich hoffe jetzt dass es da niemals Probleme gibt, und werde es mir merken, und vielleicht im Notfall später noch einmal was ändern.

lg und danke
Darian
 
Ich möchte die Primary Keys jetzt aus dem Feldnamen Array löschen, weil die Primary Keys ja von der Datenbank vergeben werden.
Der Primärschlüssel muss nicht immer ein fortlaufender, künstlicher Primärschlüssel sein, wie er beispielsweise durch das MySQL-Attribut AUTO_INCREMENT erzeugt wird. Es kann auch jede andere Ausprägung oder Kombination mehrerer sein.
 
Hallo Leute,

ja sorry, normalerweise poste ich immer die Lösung, aber ich dachte dieses mal wäre es keine Rede wert.

Meine Lösung:

PHP:
unset($field_array[$pk_array[0]]);

Ich habe einfach darauf verzichtet dass alle vom pk array gelöscht werden, und anhand der Information von hubbi es so gemacht.

Ich hoffe jetzt dass es da niemals Probleme gibt, und werde es mir merken, und vielleicht im Notfall später noch einmal was ändern.

lg und danke
Darian
naja das ist doch im endeffekt die lösung die ich dir schon gepostet hab ;)
nur das ich $pk_array mit foreach durchlaufe
 
Zurück