I';我试图对一个PHP数组进行排序,但可以';我不知道怎么做
如何在PHP中转换如下所示的数组:I';我试图对一个PHP数组进行排序,但可以';我不知道怎么做,php,arrays,sorting,grouping,multidimensional-array,Php,Arrays,Sorting,Grouping,Multidimensional Array,如何在PHP中转换如下所示的数组: Array ( [2] => B.eot [3] => B.ttf [4] => CarnevaleeFreakshow.ttf [5] => CarnevaleeFreakshow.eot [6] => TRASHED.ttf [7] => sub.ttf ) Array( [B]=>array(
Array (
[2] => B.eot
[3] => B.ttf
[4] => CarnevaleeFreakshow.ttf
[5] => CarnevaleeFreakshow.eot
[6] => TRASHED.ttf
[7] => sub.ttf
)
Array(
[B]=>array(
[0] => B.eot
[1] => B.ttf
)
[CarnevaleeFreakshow]=>array(
[0] => CarnevaleeFreakshow.ttf
[1] => CarnevaleeFreakshow.eot
)
[TRASHED]=>array(
[0] => TRASHED.ttf
)
[sub]=>array(
[0] => sub.ttf
)
)
看起来像这样:
Array (
[2] => B.eot
[3] => B.ttf
[4] => CarnevaleeFreakshow.ttf
[5] => CarnevaleeFreakshow.eot
[6] => TRASHED.ttf
[7] => sub.ttf
)
Array(
[B]=>array(
[0] => B.eot
[1] => B.ttf
)
[CarnevaleeFreakshow]=>array(
[0] => CarnevaleeFreakshow.ttf
[1] => CarnevaleeFreakshow.eot
)
[TRASHED]=>array(
[0] => TRASHED.ttf
)
[sub]=>array(
[0] => sub.ttf
)
)
做这种事有名字吗?
正在从数据库中检索数据
scandir
数组。
做这种事有名字吗
没有。无论如何,使用循环应该相当简单:
<?php
$newArray = array( );
foreach( $originalArray as $fontfile ) {
$newArray[basename( $font )][] = $fontfile;
}
echo '<pre>' . print_r( $newArray, true );
据我所知,没有“简单”的方法可以做到这一点。 您可以构建一个函数来处理它
function subdiv(array $arr) {
$res = array();
foreach($arr as $val) {
$tmp = explode('.', $val);
if(!isset($res[$tmp[0]]))
$res[$tmp[0]] = array();
$res[$tmp[0]][] = $val;
} return $res;
}
这应该符合您的要求。试试:
$res = subdiv($array);
var_dump($res);
用于:
$ARRraw = array (
"B.eot",
"B.ttf",
"CarnevaleeFreakshow.ttf",
"CarnevaleeFreakshow.eot",
"TRASHED.ttf",
"sub.ttf"
) ;
$sorted = array();
foreach($ARRraw as $one){
$firstPoint = strpos($one,".");
// No point? then skip.
if (!($firstPoint === false)){
// Get the part before the point.
$myKey = substr($one,0,$firstPoint);
$sorted[$myKey][] = $one;
}
}
这里有一个例子
它可以写得更短,但我认为这是最有启发性的
您不是在排序,而是在分组(然后可能会对组进行排序,尽管您的示例没有演示这一点),从何处获取数组的数据?使用多维数组。这是
scandir
的结果,只返回文件。