joomla CMSの制限により、(ケーキの)製品ページのフォームにフィールドを追加できる方法を考える必要がありました。警告なしでこの配列をループするにはどうすればいいですか?
私は以下を思いついた。
これは私の出発文字列です:
||
Taart grootte*30cm:40cm:50cm
|Kleur*rood:blauw:groen:wit
|Optie 3*optie1:optie2:optie3
私が最初productpageの残りの部分から私のカスタムフィールドを分割する||
に爆発します。その後、私は|
を分解して、各カスタムフィールドを分離してから、その結果を*
に展開して、フィールド名から選択オプションを分離します。すべてうまくいきますが、今では、:
で爆発して、お互いの選択肢を分けていきたいと思います。
変数$lines
には必要な情報が含まれています。私は、キー[1]
(オプション)とのデータのみを必要とするしかし
Array ([0] =>
Taart grootte [1] => 30cm:40cm:50cm
) Array ([0] => Kleur [1] => rood:blauw:groen:wit
) Array ([0] => Optie 3 [1] => optie1:optie2:optie3
)
:配列はこのようになります。私が使用することはできません。
foreach($lines[1] as $result){
}
それが与えるので:Warning: Invalid argument supplied for foreach() in ....
をデータが私のために使用可能であるように、私はオプションを分割することができますどのように?
私は次のことを試してみました:
foreach($lines as $result){
$resultaat = explode(':', $result);
}
foreach($resultaat as $final){
$finalvar .= $final;
}
echo $finalvar;
しかし、その結果がこれです:彼らは一度だけ、文字列である一方
同じオプションは、複数回表示しました。
私の全体のコード:答えの追加情報については
が<?
// 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;
?>
編集:
<?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;
?>
ここで問題を再現してくださいhttp://phpfiddle.org/ – Ionut
@Ionut私はハードコードされた文字列を使用してスクリプト内でそれを使用していますが、スクリプトを実行すると、PHPコードはPHPのように表示されませんがインストールされています。また、どこに共有可能なリンクを得るか分かりません。 – twan