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

#1
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

PHP:
$node = Array ('K', 'I', 'J', 'L');

$queryTwo = "SELECT *
                      FROM kanten
                      WHERE     nodeIdSource IN (implode(" ", $nodeList))
                           OR        nodeIdDestination IN (implode(" ", $nodeList)";
 

Yaslaw

n/a
Moderator
#2
Bei wenig Daten kannst du mit FIND_IN_SET() arbeiten.
SQL:
WHERE FIND_IN_SET(nodeIdSource, 'K,I,J,L')
-- Also umgesetzt
WHERE FIND_IN_SET(nodeIdSource, '. implode(',', $nodeList .')
Ansosten halt etwa so
PHP:
function quoteString($item){
   return "'{$item}'";
}

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

$nodeList = array ('K', 'I', 'J', 'L');
$sqlNodeList = implode(',', array_map('quoteString', $nodeList));
$queryTwo = "... WHERE nodeIdSource IN ({$sqlNodeList }) OR ..";
Oder mit create_function
PHP:
$nodeList = array ('K', 'I', 'J', 'L');
$sqlNodeList = implode(',', array_map(create_function('$item', 'return "\'$item\'";'), $nodeList));
$queryTwo = "... WHERE nodeIdSource IN ({$sqlNodeList }) OR ..";
Danke für deine Antwort

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

Yaslaw

n/a
Moderator
#4

Yaslaw

n/a
Moderator
#6
Dann musst du halt die Funktion anderst benennen...
 
#8
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:
 $color = "white";
 $nodeList = array ('K', 'I', 'J', 'L', 'M', 'X', 'Z');
 foreach($nodeList as $key){
 echo "{key: " .$key. ','.'&nbsp;&nbsp;&nbsp;' ."color: " .$color. "}<br>";
 }
 //$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
 

Yaslaw

n/a
Moderator
#9
Mal Beispiele wie man ein " in den Text setzen kann
PHP:
echo "\"";
echo '"';
echo "&quot;";
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
PHP:
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
Nicht nur bessere Ansicht. Probiere mal den folgenden Code und du wirst verstehen
PHP:
$foo = 'foo';
echo "Hallo $foobar<br />";
echo "Hallo {$foo}bar<br />";
Zudem kann innerhalb von {} direkt auf Array-Elemente oder Objekt-Properties zugegriffen werden
PHP:
$array = array('id_0'=>'foo', 'id_1'=>'bar');
$object = (object) $array;
echo "Hallo {$array['id_0']}{$object->id_1}<br />";
//geht sogar mit " anstelle von ' für den Indexname
echo "Hallo {$array["id_0"]}{$object->id_1}<br />";
//und somit kann der Index des Arrays wieder aus einem zusammengesetzten String bestehen
$id = 0;
echo "Hallo {$array["id_{$id}"]}{$object->id_1}<br />";
Und wenn man sich die {} einfach angewöhnt (den falsch sind sie nie), muss man sich keine Gedanken mehr machen, damit solche Fehler wie im ersten Beispiel passieren.
Zudem ists mMn besser lesbar, aber das ist Geschmacksachse
 
#10
Mal Beispiele wie man ein " in den Text setzen kann
PHP:
echo "\"";
echo '"';
echo "&quot;";
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
PHP:
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
danke für die weitere Erklärung und es funktioniert.
hier ist was ich gemacht hatte
PHP:
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"},
 
#12
Die sauberste Art ist es, alle Zeilen in ein Array zu schreiben und das dann zusammengesetzt ausgeben.
PHP:
 $color = "white";
 $nodeList = array ('K', 'I', 'J', 'L', 'M', 'X', 'Z');
 $lines = array();
 foreach($nodeList as $key){
     $lines[] = "{key: \"{$key}\",&nbsp;&nbsp;&nbsp;color: \"{$color}\"}";
 }
echo implode(',<br />', $lines);
 
Zuletzt bearbeitet von einem Moderator:
#14
Die sauberste Art ist es, alle Zeilen in ein Array zu schreiben und das dann zusammengesetzt ausgeben.
PHP:
 $color = "white";
 $nodeList = array ('K', 'I', 'J', 'L', 'M', 'X', 'Z');
 $lines = array();
 foreach($nodeList as $key){
     $lines[] = "{key: \"{$key}\",&nbsp;&nbsp;&nbsp;color: \"{$color}\"}";
 }
echo implode(',<br />', $lines);

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

PHP:
$zaehlerOne = 0;
$len = Count($nodeList);

foreach($nodeList as $v){
      if($zaehler == $len - 1){
          echo "{  key:  \"".$v."\"  }<br>";
       }
      else{
          echo "{  key:  \"".$v."\"  },<br>";
      }
      $zaehler++;
}
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:
$family = array(
         "source" => array("I", "J", "K"; "L", "M", "M"),
         "destination" => array("K", "K", "L", "M", "X", "Z")
);

$zaehlerTwo = 0;
$N = Count($family);

foreach($family as $v){
      if($zaehlerTwo == $N - 1){
          echo "{  from: \"".$family["source[$i]."\",&nbsp;&nbsp;  to: \"".$Family["destination"][$i]. "\"  }<br>";
       }
      else{
           echo "{  from: \"".$family["source[$i]."\",&nbsp;&nbsp;  to: \"".$Family["destination"][$i]. "\"  },<br>";
      }
      $zaehlerTwo++;
}
 
#15
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

PHP:
<?php
$family = array(
         "source" => array("I", "J", "K", "L", "M", "M"),
         "destination" => array("K", "K", "L", "M", "X", "Z")
);

$lines = array();
$size = sizeof($family['source']);
$i = 0;
for($i = 0; $i < $size; ++$i){
   $lines[] = "{  from: \"{$family["source"][$i]}\",&nbsp;&nbsp;  to: \"{$family["destination"][$i]}\"  }";  
}
echo implode(',<br />', $lines).'<br />';
?>
Code:
{ from: "I",    to: "K" },
{ from: "J",    to: "K" },
{ from: "K",    to: "L" },
{ from: "L",    to: "M" },
{ from: "M",    to: "X" },
{ from: "M",    to: "Z" }
 
#16
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

PHP:
<?php
$family = array(
         "source" => array("I", "J", "K", "L", "M", "M"),
         "destination" => array("K", "K", "L", "M", "X", "Z")
);

$lines = array();
$size = sizeof($family['source']);
$i = 0;
for($i = 0; $i < $size; ++$i){
   $lines[] = "{  from: \"{$family["source"][$i]}\",&nbsp;&nbsp;  to: \"{$family["destination"][$i]}\"  }";
}
echo implode(',<br />', $lines).'<br />';
?>
Code:
{ from: "I",    to: "K" },
{ from: "J",    to: "K" },
{ from: "K",    to: "L" },
{ from: "L",    to: "M" },
{ from: "M",    to: "X" },
{ from: "M",    to: "Z" }
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
Und? Passt meine Lösung?
 
#19
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
Am besten stellst du diese Frage im Javascript-Forum. Meine Kenntnisse von Javascript sind schon uralt und halb vergessen.
 

Neue Beiträge