Aufgrund der Einschränkungen in den Joomla cms musste ich über eine Möglichkeit nachdenken, Felder zu einem Formular auf einer Produktseite (für Kuchen) hinzufügen zu können.Wie wiederhole ich dieses Array ohne Warnungen?
So kam ich auf Folgendes.
Das ist mein Start string:
||
Taart grootte*30cm:40cm:50cm
|Kleur*rood:blauw:groen:wit
|Optie 3*optie1:optie2:optie3
ich explodiert zuerst auf ||
meine benutzerdefinierten Felder aus dem Rest der Produktseite zu spalten. Dann explodiere ich auf |
, um jedes benutzerdefinierte hinzugefügte Feld zu trennen, dann explodiere ich dieses Ergebnis auf *
, um die Auswahloptionen von den Feldnamen zu trennen. Alles funktioniert gut, aber jetzt möchte ich die Optionen voneinander trennen, indem Sie auf :
explodieren. Die Variable $lines
enthält die Informationen, die ich brauche. Das Array sieht wie folgt aus:
Array ([0] =>
Taart grootte [1] => 30cm:40cm:50cm
) Array ([0] => Kleur [1] => rood:blauw:groen:wit
) Array ([0] => Optie 3 [1] => optie1:optie2:optie3
)
Jedoch habe ich nur die Daten mit Schlüssel [1]
(die Optionen) benötigen. Ich kann nicht verwenden:
foreach($lines[1] as $result){
}
Denn es gibt: Warning: Invalid argument supplied for foreach() in ....
Wie kann ich teilen Sie die Optionen, so dass die Daten für mich nutzbar ist?
Ich habe versucht, die folgenden:
foreach($lines as $result){
$resultaat = explode(':', $result);
}
foreach($resultaat as $final){
$finalvar .= $final;
}
echo $finalvar;
Aber das Ergebnis davon ist dieser:
Gleiche Optionen mehrfach angezeigt, während sie nur einmal in der Zeichenfolge sind.
Mein ganzer Code:
<?
// Functie om alles te deleten tussen de aangegeven values (brackets in deze code)
function delete_all_between($beginning, $end, $string) {
$beginningPos = strpos($string, $beginning);
$endPos = strpos($string, $end);
if ($beginningPos === false || $endPos === false) {
\t return $string;
}
$textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos);
return str_replace($textToDelete, '', $string);
}
// Explode the fulltext on ||
$explode = explode('||', $taartcr[0]['fulltext']);
if(strpos($explode[1], '[') == false){
echo '';
echo $explode[0];
echo '';
// Explode fulltext after || on commas
$explode2 = explode('|', $explode[1]);
$lijst .= '<div class="form-group">';
foreach($explode2 as $list){
\t $lines = explode('*', $list);
foreach($lines as $result){
\t $resultaat = explode(':', $result);
}
foreach($resultaat as $final){
\t $finalvar .= $final;
}
echo $finalvar;
// echo $finalvar;
// echo '<pre>';
\t // // print_r($resultaat);
// echo $resultaat;
\t // echo '</pre>';
\t if($list[0] != ''){
\t \t $lijst .= '
\t <i class="fa fa-birthday-cake cbx-contact-icon"></i>
\t <select required="" placeholder="'.strip_tags($lines[0]).'" id="cbxname" class="form-control cbxname cbx-form-control" name="cbxname">
\t <option value="" disabled selected>'.strip_tags($lines[0]).'</option>
\t '.$resultaat.'
\t </select>
\t \t ';
\t }
}
$lijst .= '</div>';
}else{
$string = $explode[1];
$nobrackets = delete_all_between('[', ']', $string);
echo '<div class="col-md-6 wow fadeInUp" data-wow-duration="2s">'.strip_tags($explode[0]).'</div>';
echo '<div class="col-md-6 wow fadeInUp" data-wow-duration="2s">'.strip_tags($nobrackets).'</div>';
}
echo $lijst;
?>
Bearbeiten für zusätzliche Informationen über Antwort:
<?php
$lines = explode('||', $taartcr[0]['fulltext']);
$lines = end($lines);
$lines = explode('|', $lines);
$options = [];
foreach ($lines as $line) {
$result = explode('*', $line);
$name = trim($result[0]);
$values = $result[1];
$options[] = [
'name' => $name,
'values' => array_map('trim', explode(':', $values)),
];
}
foreach($options as $field){
$options1 = $field['values'];
foreach($options1 as $option){
$test .= '<option>'.$option.'</option>';
}
$fields .= '
<div class="form-group">
<i class="fa fa-birthday-cake cbx-contact-icon"></i><select required="" placeholder="'.$field['name'].'" id="cbxname" class="form-control cbxname cbx-form-control" name="cbxname">
<option value="" disabled selected>'.$field['name'].'</option>
'.$test.'
</select>
<label for="cbxname" class="error valid" id="cbxname-error"></label>
</div>';
}
echo $fields;
?>
Bitte replizieren Sie Ihr Problem hier http://phpfiddle.org/ – Ionut
@Ionut Ich versuche, indem Sie nur eine fest codierte Zeichenfolge verwenden und das in meinem Skript, aber wenn ich das Skript ausführen, sehe ich nur den PHP-Code echoed wie kein PHP ist installiert. Haben Sie auch keine Ahnung, wo Sie einen teilbaren Link bekommen können. – twan