2016-06-27 10 views
0

Ich habe die Variable $request. Wenn ich vardump($request) tun, bekomme ich die Ausgabe von:Ausgabe des Arrays immer gleich 'i'

array(7) { 
    ["controller"]=> string(5) "index" 
    ["action"]=> string(5)"index" 
    ["module"]=> string(7) "default" 
    [2]=> array(8) { 
     ["g_goal_list_id"]=> string(3) "127" 
     ["textgoal"]=> string(9) "eats food" 
     ["task_0"]=> string(1) "0" 
     ["value_0"]=> string(5) "pukes" 
     ["task_1"]=> string(1) "0" 
     ["value_1"]=> string(0) "" 
     ["task_2"]=> string(1) "0" 
     ["value_2"]=> string(0) "" 
    } 
    [3]=> array(10) { 
     ["g_goal_list_id"]=> string(3) "128" 
     ["textgoal"]=> string(9) "goes home" 
     ["task_0"]=> string(1) "0" 
     ["value_0"]=> string(20) "but never comes back" 
     ["task_1"]=> string(1) "0" 
     ["value_1"]=> string(14) "stays home now" 
     ["task_2"]=> string(1) "0" 
     ["value_2"]=> string(0) "" 
     ["task_3"]=> string(1) "0" 
     ["value_3"]=> string(0) "" 
    } 
    ["submit"]=> string(4) "Save" 
    ["task"]=> string(1) "5" 
} 

, die alle korrekt ist. Aber ich versuche, eine foreach statment zu verwenden, um Werte aus dem $request Array zu greifen und sie in eine data gestellt habe, und dann, dass db zum mysql einreichen ...

foreach($request as $currentrow){ 
     //skips row if the field is empty 
     if(strlen($currentrow['value']) < 1)//need to make sure I've defined $currentrow['value'] 
      continue;//skips row with empty field 

     //I only need to grab the value/list_id/account_id from the form  
     $data = array('value' => $currentrow['value'], 
      'g_goal_list_id' => $currentrow['g_goal_list_id'], 
      'account_id' => g_getAccountId(), 
      ); 
     var_dump($data);     

Allerdings, wenn ich meine var_dump($data); Ausgabe sieht wie folgt aus:

array(3) { ["value"]=> string(1) "i" ["g_goal_list_id"]=> string(1) "i" ["account_id"]=> string(1) "1" } 

array(3) { ["value"]=> string(1) "S" ["g_goal_list_id"]=> string(1) "S" ["account_id"]=> string(1) "1" } 

array(3) { ["value"]=> string(1) "5" ["g_goal_list_id"]=> string(1) "5" ["account_id"]=> string(1) "1" } 

das einzige, was in diesem var_dump($data) richtig ist, ist die ["account_id"]

ich denke, dass meine Schleife falsch ist, und ich bin ziemlich schlecht mit Schleifen. Sooooo ja, hoffentlich habe ich genügend Informationen aufgenommen. Vielen Dank.

+1

ändern Können Sie bearbeiten Ihre Frage die Ausgabe von 'Echo liefern '

'.print_r($_REQUEST).'
';' statt 'var_dump ($ _ REQUEST);' bitte? Es wird Ihre Arrays viel besser lesbar machen und Ihnen helfen, ihre Hierarchien aufzuzeigen. Machen Sie das gleiche mit '$ data', bitte. Vielen Dank. – MonkeyZeus

+0

$ data = array ('wert' => $ currentrow ['werte'], // sollte das nicht sein $ currentrow ['wert'] ??? –

+0

Ich konnte die Ausgabe der Daten nicht bearbeiten : 'echo '

'.print_r($_DATA).'
';' –

Antwort

0

Huge dank @MonkeyZeus. Ich habe weiterhin ein Array mit den richtigen Schlüsseln erhalten, aber alle Werte waren null. Stellt sich heraus, ich musste nur meine var_dump($data) innerhalb meiner Schleife setzen, denn wenn es auf der Außenseite war, gab es nur das letzte Array zurück, das es gründlich durchschlug. Auf meinem Formular waren die letzten Werte, die es durchlaufen hat, leere Felder, die für den Benutzer zum Hinzufügen von Eingaben gedacht sind. Außerdem hatte ich 'g_goal_list_id' => $currentrow[$k]['g_goal_list_id'] nur 'g_goal_list_id' => $currentrow['g_goal_list_id']

foreach ($request as $k=> $currentrow) { 
     $hit = false; 
     $data = array(); 

     if(is_array($currentrow)){ 
      foreach ($currentrow as $k2 => $v2) { 
       $explode = explode('_', $k2); //blows off the suffix of the $key 
       //var_dump($explode); 
       //$explode=substr($explode,2); 
       //echo $k2; 
       //echo '******'; 
       //echo $v2; 
       echo $explode[0]; 
       echo '/'; 

       if($explode[0] == 'value'){ 
        //echo "[" . $currentrow['g_goal_list_id'] . "]"; 
        $hit = true; 
        $data = array(
         'value' => $v2, 
         'g_goal_list_id' => $currentrow['g_goal_list_id'], 
         'account_id'=> g_getAccountId(), 
         ); 
        continue; 
       } 
      var_dump($data); 
      } 

     } 

     if ($hit === false){ 
      continue; 
     } 

     break; 
    } 
+0

@MonkeyZeus, danke. –

0

Dieses Element: $currentrow['values'] existiert nicht (überprüfen Sie Ihre Protokolle, Sie sollten Hinweise sehen). Auch nicht $currentrow['g_goal_list_id'].

Sie durchlaufen ein Array mit allen verschiedenen Elementen, wobei das erste eine Zeichenfolge mit dem Wert index ist. Wenn Sie dann diese Zeichenkette nehmen und diese mit values abonnieren, wird eine Warnung ausgegeben, aber dann wird das erste Element übernommen.

Um zu klären, ein einig CLI Code:

php > $a="abcd"; 
php > echo $a["foo"]; 
PHP Warning: Illegal string offset 'foo' in php shell code on line 1 
a 

Wenn Sie Schlüssel und Werte in einer Schleife über, wie dies tun:

foreach($request as $key=>$value) { 
} 

Das, gesagt denke ich, eine Schleife nicht ist Was Sie wollen, Sie haben keine direkten tabellenartigen Daten.

+0

'g_goal_list_id' existiert, aber ich weiß nicht, wie ich es anfange, daher gibt meine 'foreach'-Schleife nicht das richtige aus –

+0

Sie wollen wahrscheinlich Schlüssel und Werte überlappen .Mach das so: 'foreach ($ arr als $ key => $ value) {..}'. –

+0

und du hast recht '$ currentrow ['values']' existiert nicht, aber ich habe es auf '$ currentrow ['value']' ' –

1

Was Sie brauchen, ist etwas Ähnliches:

foreach($request as $k=>$currentrow) 
{ 
    $hit = false; 
    $data = array(); 

    // Only look for sub-arrays 
    if(is_array($currentrow)) 
    { 
     foreach($currentrow as $k2=>$v2) 
     { 
      $explode = explode('_', $k2); 

      if($explode[0] === 'value') //need to make sure I've defined $currentrow['value'] regardless of suffix 
      { 
       $hit = true; 
       $data = array(
        'value' => $v2, 
        'g_goal_list_id' => $currentrow[$k]['g_goal_list_id'], 
        'account_id' => g_getAccountId(), 
       ); 

       continue; 
      } 
     } 
    } 

    if($hit === false) 
    { 
     continue; 
    } 

    var_dump($data); 
} 
+0

Ich mag, wohin das geht, aber leider 'g_goal_list_id' ist ein' Schlüssel' also explodiert es, was nicht gut ist. Ich muss in der Lage sein, die letzten zwei Zeichen zu entfernen, die '_x' sind, während x = die dynamisch erzeugte Ganzzahl –

+0

@BartDangus Mein schlechter, hatte ich einen Fehler in meiner Logik. Bitte beachten Sie das Update. – MonkeyZeus

+0

genial, das bringt mich einen Schritt näher, aber mein '$ data' Array gibt mir' ["value"] => string (0) "" ["g_goal_list_id"] => NULL 'Mir scheint etwas zu fehlen. –

Verwandte Themen