1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Ist es möglich die Implode() Funktion in einem Query zu verwenden?

Dieses Thema im Forum "PHP" wurde erstellt von Karlito1, 13. Oktober 2016.

  1. Karlito1

    Karlito1 Mitglied

    ich versuche auch hier die Funktion implode zu verwenden, indem ich schon alle Tricks mit ' ' und " " verwendet habe damit die Ergebnisse in nodeIdSource und nodeIdDestination so ('K' 'I' 'J' 'L'); aussehen. Aber erfolgslos. Ich würde mich freuen auf Ideen. Danke

    error reports und Versuche:

    $nodeList = array ('K', 'I', 'J', 'L');
    $test = implode("' '", $nodeList);
    echo $test; // K' 'I' 'J' 'L

    und

    < ?php
    $nodeList = array ('K', 'I', 'J', 'L');
    $test = implode(' "' '" ', $nodeList);
    echo $test;
    ?>

    Parse error: syntax error, unexpected ''" '' (T_CONSTANT_ENCAPSED_STRING) in

    Code (PHP):
    1. $node = Array ('K', 'I', 'J', 'L');
    2.  
    3. $queryTwo = "SELECT *
    4.                      FROM kanten
    5.                      WHERE     nodeIdSource IN (implode(" ", $nodeList))
    6.                           OR        nodeIdDestination IN (implode(" ", $nodeList)";
     
  2. Yaslaw

    Yaslaw n/a Moderator

    Bei wenig Daten kannst du mit FIND_IN_SET() arbeiten.
    Code (SQL):
    1. WHERE FIND_IN_SET(nodeIdSource, 'K,I,J,L')
    2. -- Also umgesetzt
    3. WHERE FIND_IN_SET(nodeIdSource, '. implode(',', $nodeList .')
    Ansosten halt etwa so
    Code (PHP):
    1. function quoteString($item){
    2.    return "'{$item}'";
    3. }
    4.  
    5. $nodeList = array ('K', 'I', 'J', 'L');
    6. $sqlNodeList = implode(',', array_map('quoteString', $nodeList));
    7. $queryTwo = "... WHERE nodeIdSource IN ({$sqlNodeList }) OR ..";
    Oder mit create_function
    Code (PHP):
    1. $nodeList = array ('K', 'I', 'J', 'L');
    2. $sqlNodeList = implode(',', array_map(create_function('$item', 'return "\'$item\'";'), $nodeList));
    3. $queryTwo = "... WHERE nodeIdSource IN ({$sqlNodeList }) OR ..";
     
  3. Karlito1

    Karlito1 Mitglied

    Danke für deine Antwort

    ich hatte diese Alternativ gemacht
    Code (PHP):
    1. foreach($nodeList as $node){
    2.  $x = " '$node' " ;
    3.  //echo $x;
    4. }
    5. $queryTwo = "SELECT *
    6.       FROM kanten
    7.       WHERE     nodeIdSource IN ($x)
    8.       OR        nodeIdDestination IN ($x)";*/
    und funktioniert
    und wenn ich deine function quoteString verwende erhalte ich folgendes
    Fatal error: Cannot redeclare quoteString() (previously declared in
     
  4. Yaslaw

    Yaslaw n/a Moderator

  5. Karlito1

    Karlito1 Mitglied

    ja genau dasselbe aber ohne ","
     
  6. Yaslaw

    Yaslaw n/a Moderator

    Dann musst du halt die Funktion anderst benennen...
     
  7. Karlito1

    Karlito1 Mitglied

    gut. danke
     
  8. Karlito1

    Karlito1 Mitglied

    Hey Yalaw,
    ich wollte kein neues Thema erstellen denn die Frage ist fast gleich ... also bitte können sie mir helfen.

    hier ist mein code
    PHP:
    1.  $color = "white";
    2.  $nodeList = array ('K', 'I', 'J', 'L', 'M', 'X', 'Z');
    3.  foreach($nodeList as $key){
    4.  echo "{key: " .$key. ','.'&nbsp;&nbsp;&nbsp;' ."color: " .$color. "}<br>";
    5.  }
    6.  //$nodeList1 = ('".implode("','", $nodeList)."');
    und Output


    {key: K, color: white}
    {key: I, color: white}
    {key: J, color: white}
    {key: L, color: white}
    {key: M, color: white}
    {key: X, color: white}
    {key: Z, color: white}


    ABER ich will es so

    { key: "I", color: "white" },
    { key: "J", color: "white" },
    { key: "K", color: "white" },
    { key: "L", color: "white" },
    { key: "M", color: "white" },
    { key: "X", color: "white" },
    { key: "Z", color: "white" }

    DANKE
     
  9. Yaslaw

    Yaslaw n/a Moderator

    Mal Beispiele wie man ein " in den Text setzen kann
    Code (PHP):
    1. echo "\"";
    2. echo '"';
    3. echo "&quot;";
    4. echo '&quot;';
    Unterscheid der Begrenzungszeichen
    "..." Der Inhalt wird geparst. Also Variablen innerhalb des Strings werden übersetzt
    '...' Der Inhalt wird nicht geparst.

    Ich persönlich würde jetzt das so umsetzen. Ist Geschmacksache
    Code (PHP):
    1. echo "{key: \"{$key}\",&nbsp;&nbsp;&nbsp;color: \"{$color}\"}<br>";
    Ich mag das Stringzusammensetzen mit dem Punkt nicht besonders. Die {} könnte man auch weglassen.
    Aber die Complex (Curly) Syntax ist einfach übersichtlicher und mächtiger.

    Ich hatte vor einiger Zeit mal das dazu geschrieben
     
  10. Karlito1

    Karlito1 Mitglied

    danke für die weitere Erklärung und es funktioniert.
    hier ist was ich gemacht hatte
    PHP:
    1. echo "{key: \"".$v."\",&nbsp;&nbsp;&nbsp; color: \"".$color."\"},<br>";
    (funktioniert auch, aber ich finde Ihre Lösung effektiver) Also jetzt will ich das letzte Komma weg. Danke noch mal

    {key: "K", color: "white"},
    {key: "I", color: "white"},
    {key: "J", color: "white"},
    {key: "L", color: "white"},
    {key: "M", color: "white"},
    {key: "X", color: "white"},
    {key: "Z", color: "white"},
     
  11. Karlito1

    Karlito1 Mitglied

    Danke ich habe es geschafft ...
     
  12. Yaslaw

    Yaslaw n/a Moderator

    Die sauberste Art ist es, alle Zeilen in ein Array zu schreiben und das dann zusammengesetzt ausgeben.
    Code (PHP):
    1.  $color = "white";
    2.  $nodeList = array ('K', 'I', 'J', 'L', 'M', 'X', 'Z');
    3.  $lines = array();
    4.  foreach($nodeList as $key){
    5.      $lines[] = "{key: \"{$key}\",&nbsp;&nbsp;&nbsp;color: \"{$color}\"}";
    6.  }
    7. echo implode(',<br />', $lines);
     
    Zuletzt von einem Moderator bearbeitet: 20. Oktober 2016
    Karlito1 gefällt das.
  13. Karlito1

    Karlito1 Mitglied

  14. Karlito1

    Karlito1 Mitglied


    ok
    hier ist meine Lösung (ich habe $color weggenommen)

    PHP:
    1. $zaehlerOne = 0;
    2. $len = Count($nodeList);
    3.  
    4. foreach($nodeList as $v){
    5.       if($zaehler == $len - 1){
    6.           echo "{  key:  \"".$v."\"  }<br>";
    7.        }
    8.       else{
    9.           echo "{  key:  \"".$v."\"  },<br>";
    10.       }
    11.       $zaehler++;
    12. }
    deine Lösung passt schon aber mit einem "normalen" Array
    ich habe versucht die anzupassen aber ich komme nicht weiter und zwar mit diesem zwei dim. Array

    PHP:
    1. $family = array(
    2.          "source" => array("I", "J", "K"; "L", "M", "M"),
    3.          "destination" => array("K", "K", "L", "M", "X", "Z")
    4. );
    5.  
    6. $zaehlerTwo = 0;
    7. $N = Count($family);
    8.  
    9. foreach($family as $v){
    10.       if($zaehlerTwo == $N - 1){
    11.           echo "{  from: \"".$family["source[$i]."\",&nbsp;&nbsp;  to: \"".$Family["destination"][$i]. "\"  }<br>";
    12.        }
    13.       else{
    14.            echo "{  from: \"".$family["source[$i]."\",&nbsp;&nbsp;  to: \"".$Family["destination"][$i]. "\"  },<br>";
    15.       }
    16.       $zaehlerTwo++;
    17. }
     
  15. Yaslaw

    Yaslaw n/a Moderator

    item: Wasn dat? Da feht ein ]
    ...".$family["source[$i]."....

    item: Und zudem. Die Schlaufe über $family? Die hat 2 Einträge: source und Destination.
    Ich gehe mal davon aus, dass ddudie Schlaufe auf die Subarrays machen willst.

    item: Und was macht der ; im Beispiel in dem source-Array?.

    item: Woher kommt $i?

    item: $family ist nicht gleich $Family

    Ich glaube dein Beispiel ist ziemlich fehlerhaft....
    Ich gehe mal davon aus, dass du etwa das hier haben willst

    Code (PHP):
    1. <?php
    2. $family = array(
    3.          "source" => array("I", "J", "K", "L", "M", "M"),
    4.          "destination" => array("K", "K", "L", "M", "X", "Z")
    5. );
    6.  
    7. $lines = array();
    8. $size = sizeof($family['source']);
    9. $i = 0;
    10. for($i = 0; $i < $size; ++$i){
    11.    $lines[] = "{  from: \"{$family["source"][$i]}\",&nbsp;&nbsp;  to: \"{$family["destination"][$i]}\"  }";  
    12. }
    13. echo implode(',<br />', $lines).'<br />';
    14. ?>
    Code (Text):
    1. { from: "I",    to: "K" },
    2. { from: "J",    to: "K" },
    3. { from: "K",    to: "L" },
    4. { from: "L",    to: "M" },
    5. { from: "M",    to: "X" },
    6. { from: "M",    to: "Z" }
     
  16. Karlito1

    Karlito1 Mitglied

    Sorry ich habe es schneller abgeschrieben denn copy and paste funktioniert hier nicht.

    statt foreach() ist
    $N = count($family["source"]);
    for($i = 0; $i < $N; ++$i){
    ...
    }
     
  17. Yaslaw

    Yaslaw n/a Moderator

    Und? Passt meine Lösung?
     
    Karlito1 gefällt das.
  18. Karlito1

    Karlito1 Mitglied

    Oops
    Sorry
    ja klar ... danke.
    du bist echt nett
     
  19. Karlito1

    Karlito1 Mitglied

    ich bins noch :) (ich kann JavaScript Grundlagen)

    ich benutze Go.js für mein Project und ich muss jetzt mit javascript zu tun haben. Also wie kann ich bitte diesen php Code in Javascript code aufrufen damit ich sowas habe? (sorry wenn ich zu viel Frage habe)

    [JAVASCRIPT]
    var nodeDataArray = [ //Output meines php codes hier
    {key: "I"}
    {key: "J"}
    {key: "K"}
    {key: "L"}
    {key: "M"}
    {key: "X"}
    {key: "Z"}
    ]

    [/JAVASCRIPT]
     
  20. Yaslaw

    Yaslaw n/a Moderator

    Am besten stellst du diese Frage im Javascript-Forum. Meine Kenntnisse von Javascript sind schon uralt und halb vergessen.
     
Die Seite wird geladen...