PHP Basic Problem: Werte (arays) aus Funktionen in andere Funktionen laden
Eingetragen von maen (547)
am 14.10.2013 - 23:20 Uhr in
am 14.10.2013 - 23:20 Uhr in
Ich weiß, ist ein Anfängerproblem in PHP, aber ich komm da nicht drauf:
Habe ein Funktion, die ich immer wieder brauche, respektive das Ergebnis daraus. Um sie jetzt nicht in jede Funktion komplett einbauen zu müssen will ich sie als eigenständige Funktion in eine andere Datei auslegen um sie dann per include einzubinden.
Aber:
Wenn ich den return auf den array liefere (der das korrekte Ergebnis enthält) dann bricht mir danach die Funktion ab. Ergo mache ich wahrscheinlich was grundsätzlich falsch!???
Deshalb hier mein Code:
function lade_teams(){
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'team_kneipenkick');
$result = $query->execute();
$ergebnisse = array();
$ergebnisse = node_load_multiple(array_keys($result['node']));
//print_ar($ergebnisse);
$title_team = array();
$name_id = array();
$kickteams = array();
foreach ($ergebnisse as $ergebnis){
$title_team = $ergebnis->title;
$name_id = $ergebnis->nid;
$kickteams[$name_id] = $title_team;
drupal_set_message($kickteams[$name_id]);
//Beispiel: 3167=>Hertha BSC; 3162=>Eintracht Frankfurt in Variable $kickteams
//
}
return $kickteams;
}
Kickteams enthält das korrekte array. Das will ich dann in anderen Funktionen gebrauchen. Deshalb hier mein (anscheinend falscher) Lösungsansatz:
$d=lade_teams();
function lade_test(){
foreach($d as $value){
print $d;
}
}
Wenn ich den inklusive dem obigen "return $kickteams" auskommentiere läuft es. Aber wie kann ich das Ergebnis für andere Funktionen nutzen???
- Anmelden oder Registrieren um Kommentare zu schreiben
Variablen sind nicht global
am 15.10.2013 - 08:35 Uhr
Variablen sind nicht global definiert. Also entweder den Aufruf in die Funktion legen, die die Werte verarbeiten soll, oder den Array als Parameter übergeben, etwa so:
<?php
$d=lade_teams();
lade_test($d);
function lade_test($d = array()){
foreach($d as $value){
print $d;
}
}
?>
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Leider kommt da nix
am 15.10.2013 - 10:38 Uhr
Erst mal danke, aber bis dato habe ich it dem kneipenkick echt Probleme!
Ich hänge mal den Code da rein:
<?php
function fussball_convert_hallo() { //node_presave($node){
// switch ($node->type) {
// case "kk_match":
//my_hallo();
print"mich";
lade_teams();
lade_test();
// break;
//}
}
function my_hallo(){
lade_teams();
// drupal_set_message(print_r($kickteams));
//lade_test();
}
/*
* Lade die vorhandenen Teams aus der DB node 'team_kneipenkick'
*/
$kickteams = array();
function lade_teams(){
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'team_kneipenkick');
$result = $query->execute();
$ergebnisse = array();
$ergebnisse = node_load_multiple(array_keys($result['node']));
//print_ar($ergebnisse);
$title_team = array();
$name_id = array();
//$GLOBALS ($kickteams);
foreach ($ergebnisse as $ergebnis){
$title_team = $ergebnis->title;
$name_id = $ergebnis->nid;
$kickteams[$name_id] = $title_team;
drupal_set_message($kickteams[$name_id]);
//Beispiel: 3167=>Hertha BSC; 3162=>Eintracht Frankfurt in Variable $kickteams
//
}
return $kickteams;
}
//print_r($kickteams);
$d=lade_teams();
function lade_test($d = array()){
foreach($d as $value){
print $value;
}
}
?>
-> leerer Bildschirm
Wenn ich das print_r $kickteams mit einbeziehe, dann folgendes Ergebnis:
Array ();
Also muss ich da grundsätzlich was falsch machen!
<?php
am 15.10.2013 - 14:24 Uhr
<?php
$d=lade_teams();
lade_test($d); // du musst deine Ausgabefunktion auch aufrufen
?>
print_r($kickteams)
kann kein Ergebnis liefern, da diese Variabel nur in der Funktion gesetzt ist und nicht ausserhalb.
das return liefert nicht die Variable an sich, sondern nur ihren Wert. Dieser wird bei deinem Code der Variablen $d zugewiesen.
Computerboard da wird dir geholfen
OK, vielen Dank. Fehler
am 15.10.2013 - 16:38 Uhr
OK, vielen Dank. Fehler gefunden. Habe es gerade debugged. Dabei kam raus, dass node_load_multiple nicht erkannt wurde. (undefined function). Nach ein bisschen googlen wurde klar, dass zuerst mal nodes geladen werden müssen bevor diese Funktion ausgeführt werden kann, und damit auch Ergebnisse existieren. Ansonsten istt das array immer leer. Das war mein Problem. Kann man sich stundenlang mit aufhalten am Code, wenn man das nicht weiß!