问题排序多维数组

时间:2015-08-02 17:36:41

标签: php arrays sorting

我对这个正在开发的网站过滤器有这个问题,基本上我需要将所有类别放在一起:

enter image description here enter image description here

我需要将所有类别放在一起,这意味着所有的" sistema operativo"和" disco duro"选项应该在一起,而不是在列表的末尾(如图)。我尝试使用array_push()和in_array函数来实现这一点,但最后它只是再次显示这些最后的选项。

这是我的代码:

<?php 
$filterTitle = array();
foreach($resultFiltro as $filtros){ // titulo de categoria
        if (!empty($_SESSION['filterId'])){ 
            $resultDatos = filtroCategoriasDatos($filtros['id_padre']);                     
            $resultFiltroDos = filtroDatosEspecificosFiltros($filtros['id'], $in[0]);
        }else{
            $resultDatos = filtroCategoriasDatos($filtros['id_caracteristica']);                        
            $resultFiltroDos = filtroDatosEspecificos($filtros['id_caracteristica'], $in[0]);
        }   

            <div class="grupo_filtro">
            <?php 
            //if(!in_array($resultDatos[0]['titulo'], $filterTitle)){ ?>
                <div class="titulo_filtro">
                    <?php echo $resultDatos[0]['titulo'];?>
                </div> 
            <?php array_push($filterTitle, $resultDatos[0]['titulo']);?>
            <?php //} ?>
                <div class="con_filtros_filtro">
                    <?php foreach($resultFiltroDos as $select){ ?>
              <div class="filtro atributo <?php echo $class;?>" titulopadre="<?php echo $resultDatos[0]['titulo'];?>" id="<?php echo $select['id'];?>">
                            <?php echo $select['titulo'];?>
                        </div>
                    <?php } ?>
                </div>
            </div>
            <?php 
            } ?>

我不知道这是否可以修复以某种方式对记录集进行排序,或者是否有其他技巧可以帮助我解决这个问题。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为这可能是你的解决方案

<?php 
$filterTitle = array();
foreach($resultFiltro as $filtros){ // titulo de categoria

?> <div class="grupo_filtro"> <?php

        if (!empty($_SESSION['filterId'])){ 
            $resultDatos = filtroCategoriasDatos($filtros['id_padre']);                     
            $resultFiltroDos = filtroDatosEspecificosFiltros($filtros['id'], $in[0]);
?>
                <div class="titulo_filtro">
                    <?php echo $resultDatos[0]['titulo'];?>
                </div> 
            <?php array_push($filterTitle, $resultDatos[0]['titulo']);
        }else{
            $resultDatos = filtroCategoriasDatos($filtros['id_caracteristica']);                        
            $resultFiltroDos = filtroDatosEspecificos($filtros['id_caracteristica'], $in[0]);


     ?>
                <div class="con_filtros_filtro">
                    <?php foreach($resultFiltroDos as $select){ ?>
              <div class="filtro atributo <?php echo $class;?>" titulopadre="<?php echo $resultDatos[0]['titulo'];?>" id="<?php echo $select['id'];?>">
                            <?php echo $select['titulo'];?>
                        </div>
                    <?php } ?>
                </div>
            </div>
            <?php 
            }} ?>

答案 1 :(得分:0)

问题在于功能。我添加了一个订单,它已修复。感谢大家的帮助。

这里我附上了函数

function filtroDatosEspecificosFiltros($datoPadre, $in=""){
global $db;
if($in != ""){
    $filtroCategoriaDos = "SELECT p.titulo, pc.id_atributo, pc.id_caracteristica, p.id, pc.id_producto FROM principal p INNER JOIN producto_caracteristica pc WHERE p.id=".$datoPadre." AND p.id=pc.id_atributo AND visible=1 AND pc.id_producto IN (".$in.") group by pc.id_atributo";
}else{
    $filtroCategoriaDos = "SELECT p.titulo, pc.id_atributo, pc.id_caracteristica, p.id, pc.id_producto FROM principal p INNER JOIN producto_caracteristica pc WHERE p.id=".$datoPadre." AND p.id=pc.id_atributo AND visible=1 group by pc.id_atributo";
}
$resultDatos = $db->getAll($filtroCategoriaDos);

usort($resultDatos, function ($elem1, $elem2) {
    return strcmp($elem1['titulo'], $elem2['titulo']);
});

return $resultDatos;

}

感谢所有的帮助。