2012-07-23 36 views
0

怎樣把PHP中的數組,看起來像這樣:我試圖整理一個PHP數組,但無法弄清楚如何

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 

數組。

+1

你是不是* *排序,你是*分組*(然後或許分揀組,雖然你的榜樣未能證明這一點) – 2012-07-23 07:58:53

+0

你在哪裏獲得你的陣列中的數據? – 2012-07-23 07:59:46

+0

使用多維數組.. – 2012-07-23 08:00:12

回答

1
<?php 

$data = array ( 
    2 => 'B.eot', 
    3 => 'B.ttf', 
    4 => 'CarnevaleeFreakshow.ttf', 
    5 => 'CarnevaleeFreakshow.eot', 
    6 => 'TRASHED.ttf', 
    7 => 'sub.ttf' 
); 

$new_data = array(); 
foreach ($data as $value) { 
    $tmp = explode('.', $value); 
    $ext = ''; 
    if ($tmp[1]) $ext = '.' . $tmp[1]; 
    $new_data[ $tmp[0] ][] = $tmp[0] . $ext; 
} 

print_r($new_data); 

?> 
0

有沒有做這樣的事情的名稱?

沒有。無論如何,它應該是一個相當簡單的使用循環:

<?php 
$newArray = array(); 

foreach($originalArray as $fontfile) { 
    $newArray[basename($font)][] = $fontfile; 
} 
echo '<pre>' . print_r($newArray, true); 
0

我知道有沒有'簡單'的方法做到這一點。 你可以建立一個函數來處理它。

function convertArray($array) { 
    $newArray = array(); 

    foreach($array as $item) { 
     $newArray[basename($item)] = $item; 
    } 

    return $newArray; 
} 

這應該做你想要的。

0

試試:

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); 
1

下面是一個例子。

它可以寫得更短,但我認爲這是最有啓發性的。

$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; 
    } 
}