декартово для фильтра флажок - PullRequest
0 голосов
/ 18 октября 2019

У меня есть сообщение, в котором есть мета "спальня", "ванная комната", категория "типы" и "места". Каждая итерация Поста У меня есть массив

//First Post
Array
(
    [types] => Array
        (
            [0] => development
            [1] => ground
        )

    [locations] => Array
        (
            [0] => prague
        )

    [bathrooms] => bath2
    [bedrooms] => bed5
)
// Second Post
Array
(
    [types] => Array
        (
            [0] => flat
        )

    [locations] => Array
        (
            [0] => berlin
        )

    [bathrooms] => bath2
    [bedrooms] => bed2
)

Что мне было нужно, так это создать элементы-флажки

<input name="bathroom[]" value="bath2" class="development ground flat berlin prague bed5 bed2">Bathrooms 2

<input name="bedrooms[]" value="bed2" class="flat berlin bath2">Bedrooms 2

Спасибо за ваш совет

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Исходя из Таха Паксу, я переписываю функцию для этого. Работает нормально!

function collectKeys( $key, $post, $in ){
    if(!isset($in[$post[$key]])) {
        $in[$post[$key]] = [];
    }
    if ( is_array( $post[$key] ) ) {
        foreach( $post[$key] as $t => $d) {
            foreach( $post as $k => $v ) {
                if ( $post[$k] !== $key ) {
                    if ( is_array( $post[$k] ) ) {
                        foreach( $post[$k] as $d => $c ) {
                            $in[$post[$key][$t]][] = $c;
                        }
                    } else {
                        $in[$post[$key][$t]][] = $v;
                    }
                }
            }
        }
    }
    return $in;
}
0 голосов
/ 18 октября 2019

Вам нужно сначала перебрать все сообщения и собрать все стили:

$types = [];
$beds = [];
$baths = [];

foreach($posts as $post){
    $types = collectKeys("types", $post, $types);
    $beds = collectKeys("bedrooms", $post, $beds);
    $baths = collectKeys("bathrooms", $post, $baths);
}

function collectKeys($key, $post, $in){
    if(!isset($in[$post[$key]])) $in[$post[$key]] = [];
    foreach($post["locations"] as $location) $in[$post[$key]][] = $location;
    foreach($post["types"] as $type) $in[$post[$key]][] = $type;
    return $in;
}

Затем вы можете повторить чекбоксы:

foreach($types as $typekey => $type){
   echo "<input type='checkbox' name='types[]' value='$typekey' 
         class='".implode(" ", $type)."'>";
}

foreach($beds as $bedkey => $bed){
   echo "<input type='checkbox' name='bedrooms[]' value='$bedkey' 
         class='".implode(" ", $bed)."'>";
}

foreach($baths as $bathkey => $bath){
   echo "<input type='checkbox' name='bathrooms[]' value='$bathkey' 
         class='".implode(" ", $bath)."'>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...