Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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_Arrays_Sorting - Fatal编程技术网

Php 以与字母表索引关联的数组形式重新排列/排序数据

Php 以与字母表索引关联的数组形式重新排列/排序数据,php,arrays,sorting,Php,Arrays,Sorting,我有一个记录数组(一些从数据库表中获取的类别标题),我想按以下格式对它们进行排序,以便实现如下功能 。。。以此类推,直到Z ); 我不知道如何执行此操作,但据我所知,它应该是从数据库中获取所有数据后执行的某种排序功能。我自己尝试过,但无法达到预期的效果。任何帮助/提示都足够了。提前谢谢我们开始吧 <?php $categories=array(); $i=0; $a=array('fas','abas','ajuma','bizzo','bike','Chacha','cade'); //

我有一个记录数组(一些从数据库表中获取的类别标题),我想按以下格式对它们进行排序,以便实现如下功能

。。。以此类推,直到Z );

我不知道如何执行此操作,但据我所知,它应该是从数据库中获取所有数据后执行的某种排序功能。我自己尝试过,但无法达到预期的效果。任何帮助/提示都足够了。提前谢谢

我们开始吧

<?php
$categories=array(); $i=0;
$a=array('fas','abas','ajuma','bizzo','bike','Chacha','cade'); //array, i assume as a data from db

foreach($a as $key=>$value){ // loop array $a as a result from db
if( substr(ucfirst($value),0,1) == 'A'){ 
 //array_push($categories["A"],$value);  // array_push seems not to work 
$categories["A"][]=$value;
 }
if( substr(ucfirst($value),0,1) == 'B'){
 $categories['B'][]=$value;
 }
if( substr(ucfirst($value),0,1) == 'C'){
 $categories['C'][]=$value;
  }
  // .. for C,D ....Z
}
 print_r($categories); //print result
 ?>


您可以复制并查看结果

借助上述评论和答案,我已经成功解决了问题,谢谢@fasM和@JonathanGray

下面是准确的php代码

$sorted = array();
$unsorted = array('Abreva', 'Activia', 'Advantage', 'Advil', 'Ball Park', 'Band-Aid', 'Banquet', 'Barilla', 'Campbells', 'Capri Sun', 'Carefree', 'Caress', 'Dannon', 'Dawn', 'Degree', 'Del Monte', 'Eldership', 'Eldest', 'Xlectre', 'Electrical', 'Facetious', 'Facetiously', 'Facetiousness', 'Facile', 'Gabbler', 'Gabel', 'Gabion', 'Gable', 'Habitableness', 'Habitance', 'Zabitant', 'Habitation', 'Habitator', 'Habitual', '1st Class', '7th Sky');
sort($unsorted);
$alphabets = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
foreach($unsorted as $item){ // loop array $unsorted as a result from db
    $inserted = false;
    foreach($alphabets as $alphabet){
        if(substr(ucfirst($item),0,1) == $alphabet){ 
            $sorted[$alphabet][] = $item;
            $inserted = true;
        }
    }
    if($inserted == false){
        $sorted['0-9'][] = $item;
    }
}
echo '<pre>';
print_r($sorted); //print sorted
echo '</pre>';
$sorted=array();
$unsorted=数组('Abreva','Activia','Advantage','Advil','Ball Park','Band Aid','Bante','Barilla','Campbell','Capri Sun','Carefree','Caress','Dannon','Dawn','Degree','Del Monte','Eldership','Elderst','Xlectrie','Electrical','Factiously','Facile','Gabbler','Gabel','Gabel','Gabion','Habibleness','Habitan“扎比安特”、“居住区”、“居住者”、“习惯性”、“头等舱”、“第七天空”);
排序(未排序);
$alphabets=数组('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
foreach($unsortedas$item){//循环数组$unsorted作为db的结果
$inserted=假;
foreach($alphabets作为$alphabet){
if(substr(ucfirst($item),0,1)==$alphabet){
$sorted[$alphabet][]=$item;
$inserted=真;
}
}
如果($inserted==false){
$sorted['0-9'][]=$item;
}
}
回声';
打印($sorted);//打印已排序
回声';

这应该更有效率:

$sorted=array();
$unsorted=数组('Abreva','Activia','Advantage','Advil','Ball Park','Band Aid','Bante','Barilla','Campbell','Capri Sun','Carefree','Caress','Dannon','Dawn','Degree','Del Monte','Eldership','Elderst','Xlectrie','Electrical','Factiously','Facile','Gabbler','Gabel','Gabel','Gabion','Habibleness','Habitan“扎比安特”、“居住区”、“居住者”、“习惯性”、“头等舱”、“第七天空”);
排序(未排序);
foreach($unsortedas$item){//循环数组$unsorted作为db的结果
$startchr=ucfirst($item[0]);
$sorted[is_numeric($startchr)?'0-9':$startchr][]=$item;
}
回声';
打印($sorted);//打印已排序
回声';

为什么不告诉数据库引擎对其进行排序?@JonathanGray,我们如何才能告诉数据库引擎?我假设使用了一些MySQL查询,但我对此一无所知……你能告诉我一些提示/示例吗?从表中选择*按列排序_name@JonathanGray这将返回所有分类标题的数组贝蒂利(我到目前为止已经做到了)…我的问题是如何划分第一个字母表和数组,正如我上面提到的那样…你可以在排序后的数组中循环,查看每个条目中的第一个字符。然后你可以使用它创建关联数组。我在手机上,或者我会为你编写一个示例。你不必要地使用substr,ca重复太多次,不需要那些多个if语句。这些代码不仅效率低下,而且(无意冒犯)非常难看,而且很难维护。-1根据告诉您的情况,还算不错。但请检查我的答案:)没问题!祝您愉快:)
$sorted = array();
$unsorted = array('Abreva', 'Activia', 'Advantage', 'Advil', 'Ball Park', 'Band-Aid', 'Banquet', 'Barilla', 'Campbells', 'Capri Sun', 'Carefree', 'Caress', 'Dannon', 'Dawn', 'Degree', 'Del Monte', 'Eldership', 'Eldest', 'Xlectre', 'Electrical', 'Facetious', 'Facetiously', 'Facetiousness', 'Facile', 'Gabbler', 'Gabel', 'Gabion', 'Gable', 'Habitableness', 'Habitance', 'Zabitant', 'Habitation', 'Habitator', 'Habitual', '1st Class', '7th Sky');
sort($unsorted);
$alphabets = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
foreach($unsorted as $item){ // loop array $unsorted as a result from db
    $inserted = false;
    foreach($alphabets as $alphabet){
        if(substr(ucfirst($item),0,1) == $alphabet){ 
            $sorted[$alphabet][] = $item;
            $inserted = true;
        }
    }
    if($inserted == false){
        $sorted['0-9'][] = $item;
    }
}
echo '<pre>';
print_r($sorted); //print sorted
echo '</pre>';
$sorted = array();
$unsorted = array('Abreva', 'Activia', 'Advantage', 'Advil', 'Ball Park', 'Band-Aid', 'Banquet', 'Barilla', 'Campbells', 'Capri Sun', 'Carefree', 'Caress', 'Dannon', 'Dawn', 'Degree', 'Del Monte', 'Eldership', 'Eldest', 'Xlectre', 'Electrical', 'Facetious', 'Facetiously', 'Facetiousness', 'Facile', 'Gabbler', 'Gabel', 'Gabion', 'Gable', 'Habitableness', 'Habitance', 'Zabitant', 'Habitation', 'Habitator', 'Habitual', '1st Class', '7th Sky');
sort($unsorted);
foreach($unsorted as $item){ // loop array $unsorted as a result from db
    $startchr = ucfirst($item[0]);
    $sorted[is_numeric($startchr)?'0-9':$startchr][] = $item;
}
echo '<pre>';
print_r($sorted); //print sorted
echo '</pre>';