分类多维字符串和筛选器



>我有一个多维字符串,如下所示

$string = '(car)hyundai|(car)bmw|(car)tesla|(bus)abc|(bus)cde|(cycle)are|(cyele)dyd|......'

我想对车辆(汽车、公共汽车、自行车等)中的项目进行分类,并根据车辆创建一个单选按钮

<input type = "radio" value="car"> 
<input type = "radio" value="bus"> 

并执行 onClick 事件以显示每个类别的值 因此,如果我单击汽车,则需要显示所有汽车值(例如现代,宝马,特斯拉)

到目前为止,我已经做到了

$mainData = explode('|', $string);
$data1 = [];
$category =[];
$subcategory =[];
$i=0;
foreach($mainData as $data){
$data2 = explode(')', $data);
$data1[$data2[0]][] = $data2[1];
}  
foreach ($data1 as $data3 => $dataContents) {
$datas[$data3] = array_unique($dataContents);
array_push($category,  $data3);
array_push($subcategory, $datas[$data3]);                   
}

我可以分离数据,但无法过滤数据。任何想法将不胜感激

$string = '(car)Hyundai|(car)BMW|(car)Tesla|(bus)Madina|(bus)Alsa|(cycle)BMX';

通过函数explode$string拆分为$vehicles数组:

$vehicles = explode('|', $string); // ["(car)Hyundai","(car)BMW","(car)Tesla","(bus)Madina","(bus)Alsa","(cycle)BMX"]

遍历$vehicles数组。以车辆的类型(汽车,公共汽车......)及其标记再次爆炸为例,但这次是(.并在开始时通过使用ltrim或仅substr来摆脱(。将这些$vehicles存储在数组$res中,按类型分组。

$res = [];
foreach ($vehicles as $vehicle) {
[$type, $mark] = explode(')', $vehicle);
$type = ltrim($type, '('); #substr($type, 1);
$res[$type][] = $mark;
}
Array
(
[car] => Array
(
[0] => Hyundai
[1] => BMW
[2] => Tesla
)
[bus] => Array
(
[0] => Madina
[1] => Alsa
)
[cycle] => Array
(
[0] => BMX
)
)

示范:

function category($value)
{
return "<label><input onclick=hide('$value') name='category' type='radio' value='$value'/>$value<label>";
}
function sub_category($type, $name)
{
return "<label><input name='$type' type='radio' value='$name'/>$name<label>";
}
$categories = array_map("category", array_keys($res));
echo implode('<br>', $categories);
foreach ($res as $cat => $sub_cat) {
echo "<fieldset class='field $cat' style='background-color: #eeeeee;width: 50%;'>";
echo "<legend>$cat</legend>";
foreach ($sub_cat as $vehicle) {
echo sub_category($cat, $vehicle);
}
echo "</fieldset>";
}
echo "<script>
function hideAll(){
document.querySelectorAll('.field').forEach(e=>e.style.visibility='hidden');
}

function hide(subCat){
hideAll();
document.querySelector('.field.'+subCat).style.visibility='visible';
}
</script>";

这是一个将字符串转换为合理数组的方法。


$string = '(car)hyundai|(car)bmw|(car)tesla|(bus)abc|(bus)cde|(cycle)are|(cyele)dyd';
$requiredArr = [];
$dataArr = explode('|', $string);
foreach ($dataArr as $data){
$dataSubArr = explode(')', ltrim($data, '('));
$vehicle = $dataSubArr[0];
$vType = $dataSubArr[1];
$requiredArr[$vehicle][] = $vType;
}

生成无线电输入元件的一种方法是

foreach ($requiredArr as $vehicle => $type){
echo sprintf('<input type = "radio" value="%s">', $vehicle);
}

我希望您在用户单击单选按钮时使用ajax来获取其他数据。

最新更新