由于joomla cms的限制,我不得不考虑一种方法,可以在产品页面上为表单添加字段(用于蛋糕)。
所以我想出了以下内容。
这是我的起始字符串:
||
Taart grootte*30cm:40cm:50cm
|Kleur*rood:blauw:groen:wit
|Optie 3*optie1:optie2:optie3
我首先在||
上展开,以便从产品页面的其余部分拆分自定义字段。然后我在|
上展开以分隔每个自定义添加的字段,然后我在*
上展开该结果以从字段名称中分离选择选项。一切运作良好,但现在我想通过在:
上爆炸来分离彼此的选项。
变量$lines
包含我需要的信息。该数组如下所示:
Array ( [0] =>
Taart grootte [1] => 30cm:40cm:50cm
) Array ( [0] => Kleur [1] => rood:blauw:groen:wit
) Array ( [0] => Optie 3 [1] => optie1:optie2:optie3
)
但是我只需要键[1]
(选项)的数据。我无法使用:
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) {
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){
$lines = explode('*', $list);
foreach($lines as $result){
$resultaat = explode(':', $result);
}
foreach($resultaat as $final){
$finalvar .= $final;
}
echo $finalvar;
// echo $finalvar;
// echo '<pre>';
// // print_r($resultaat);
// echo $resultaat;
// echo '</pre>';
if($list[0] != ''){
$lijst .= '
<i class="fa fa-birthday-cake cbx-contact-icon"></i>
<select required="" placeholder="'.strip_tags($lines[0]).'" id="cbxname" class="form-control cbxname cbx-form-control" name="cbxname">
<option value="" disabled selected>'.strip_tags($lines[0]).'</option>
'.$resultaat.'
</select>
';
}
}
$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;
?>
&#13;
编辑以获取有关答案的其他信息:
<?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;
?>
答案 0 :(得分:2)
我认为你对所有不同的爆炸和分隔符感到困惑。下面的代码段会将所有内容拆分为$options
数组,其中包含两个键:name
,这是一个包含选项名称的字符串,values
是一个包含选项值的数组:
<?php
$str = "||
Taart grootte*30cm:40cm:50cm
|Kleur*rood:blauw:groen:wit
|Optie 3*optie1:optie2:optie3";
$lines = explode( '||', $str );
$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 ) ),
];
}
print_r( $options );
示例print_r
结果:
Array
(
[0] => Array
(
[name] => Taart grootte
[values] => Array
(
[0] => 30cm
[1] => 40cm
[2] => 50cm
)
)
[1] => Array
(
[name] => Kleur
[values] => Array
(
[0] => rood
[1] => blauw
[2] => groen
[3] => wit
)
)
[2] => Array
(
[name] => Optie 3
[values] => Array
(
[0] => optie1
[1] => optie2
[2] => optie3
)
)
)