Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在相关章节中按字母顺序列出数据_Php_Sorting_Alphabetical - Fatal编程技术网

Php 在相关章节中按字母顺序列出数据

Php 在相关章节中按字母顺序列出数据,php,sorting,alphabetical,Php,Sorting,Alphabetical,我有一个数据数组,其中包含按字母顺序排序的数据,但在视图中,我有不同的部分。每个字母表代表每个部分。 我需要按照这样的顺序列出数据,带A的部分必须包含以A开头的所有名称,带B的部分必须包含以B开头的名称,依此类推 我的工作完成了 我制作了一个数组,该数组提供数据,并用起始字母分隔数据 foreach ($data['stores_cat_data'] as $store ) { $store_title = $store['title']."<br />";

我有一个数据数组,其中包含按字母顺序排序的数据,但在视图中,我有不同的部分。每个字母表代表每个部分。 我需要按照这样的顺序列出数据,带A的部分必须包含以A开头的所有名称,带B的部分必须包含以B开头的名称,依此类推

我的工作完成了 我制作了一个数组,该数组提供数据,并用起始字母分隔数据

foreach ($data['stores_cat_data'] as $store ) {
     $store_title   =   $store['title']."<br />";
    $curr   =   current(str_split($store_title));

    if(!preg_match("/^[a-zA-Z]$/", $curr))
    {
        $storeArray['0-9'][$store_title] = $store;
    }
    else{
        $storeArray[$curr][$store_title] = $store;
    }

}
这应该做到:

$storeArray = array();
foreach ($data['stores_cat_data'] as $store) {
    $title = $store['title'];
    $first_char = substr($title, 0, 1);

    if (preg_match("/^[0-9]$/", $first_char)) {
        $key = "0-9";
    } else {
        $key = strtoupper($first_char);
    }
    if (!isset($storeArray[$key])) {
        $storeArray[$key] = array();
    }
    $storeArray[$key][$title] = $store;
}
var_dump($storeArray);
您的代码看起来几乎正确。确定$curr的方式有点奇怪,必须考虑大写/小写。另外,为了避免数组警告,请确保在执行时初始化字母表中的每个字母

您可能还希望删除所有非字母数字字符,如和-这可能会破坏检测。最佳书店的名称将放在0-9以下,B会更好


像:preg_replace/[^A-zA-Z0-9]/,$str这样的regexp应该可以完成这项工作。

您能给我们展示一下样本输入和样本输出吗?“看来商店标题出了什么问题。@FritsvanCampen看我的编辑,有很多索引,但我粘贴了一些。输入只是一个按title排序的查询结果集,感谢您的回答,但主要问题是,在视图中,什么样的algoi将应用于列表,以使带有a的部分包含以a开头的名称,依此类推
$storeArray = array();
foreach ($data['stores_cat_data'] as $store) {
    $title = $store['title'];
    $first_char = substr($title, 0, 1);

    if (preg_match("/^[0-9]$/", $first_char)) {
        $key = "0-9";
    } else {
        $key = strtoupper($first_char);
    }
    if (!isset($storeArray[$key])) {
        $storeArray[$key] = array();
    }
    $storeArray[$key][$title] = $store;
}
var_dump($storeArray);