PHP按数组元素排序多个多维数组

时间:2016-02-17 23:38:15

标签: php arrays search foreach sphinx

我一直在尝试使用Sphinx创建搜索我的网站。我查询多个索引,因为每个索引的数据类型完全不同,但我需要按权重对所有数据进行排序并显示它。

这是我使用的foreach循环。所有注释掉的代码都是我已经尝试过的东西。

function addToSrchArray($res, $restype)
{
    global $total_result_count, $new_name_array;
    $resultCount = $res['total_found'];

    if ($resultCount > 0) {
        $total_result_count = $total_result_count + $resultCount;
        $srchtp = $restype;

        foreach ($res["matches"] as $key => $val) {
            $arrToAdd = array(
                'indx' => $key,
                'wgt'  => $val["weight"],
                'typ'  => $srchtp
            );

            if ($val["weight"] > $new_name_array[0]["wgt"]) {
                //add to begining
                array_unshift($new_name_array, $arrToAdd);
            } else {
                //echo count($new_name_array);
                $i = 0;

                while($i < count($new_name_array)) {
                    // echo $i.' '.$srchtp.'<br>';
                    //for($i = 0; $i < count($new_name_array); $i++) {                       
                        if($val["weight"] > $new_name_array[$i]["wgt"]) {
                            //array_splice($new_name_array, $i, 0, array('indx' => $key, 'wgt' => $val["weight"], 'typ' => $srchtp));
                            array_unshift(array_slice($new_name_array, 0, $i), array_unshift($arrToAdd, array_slice($new_name_array, $i)));

                            /*array_slice($new_name_array, 0, $i) +
                            $arrToAdd +
                            array_slice($new_name_array, $i, count($new_name_array)-1);*/
                            //$new_name_array[] = array('indx' => $key, 'wgt' => $val["weight"], 'typ' => $srchtp);
                            break;
                        } else if ($i == (count($new_name_array) - 1)) {
                            $new_name_array[] = array(
                                'indx' => $key,
                                'wgt'  => $val["weight"],
                                'typ'  => $srchtp
                            );
                            break;
                        }
                        $i++;
                }
            }
        }
        //var_dump($new_name_array);
    }
}

这些不同方法中的每一种都有不同的成功水平。有45个结果,其中一些显示9个,一些显示22个等等。传递给函数的$ res参数看起来像这样

["matches"] => array(2) {
    [3]=> array(2) {
        ["weight"]=> string(1) "3"
        ["attrs"]=> array(1) {
            ["follow_count"]=> string(1) "1"
        }
    }
    [2]=> array(2) {
        ["weight"]=> string(1) "2"
        ["attrs"]=> array(1) {
            ["follow_count"]=> string(1) "1"
        }
    }
}
["total"]=> string(1) "2"
["total_found"]=> string(1) "2"
["time"]=> string(5) "0.000"

请帮忙。我已经尝试了一切。什么都没有显示按重量排序的所有结果。

1 个答案:

答案 0 :(得分:0)

我担心你的方法不好。 试着想象一个更好的设计,我相信你最好建立一个包含你感兴趣的数据的新Sphinx索引。 当用户查询具有一致的结果而不进一步处理数据时,您将看到这是真的。