[英]How to sort 2D array by key and value
我有很多從 txt 文件導入的電子郵件:
$emails = file("exported_addresses.txt");
$c = count($emails);
for ( $i=0; $i<$c ; $i++ )
$emails[$i] = strtolower(trim($emails[$i]));
$portions = array();
// $c = count($emails);
for ( $i=0; $i<$c ; $i++ ):
$sub = substr($emails[$i],0,2);
if ( strlen($sub)==2 ) // e.g a1
$sub .= $sub[0]." ";
if ( !isset( $sub, $portions) )
$portions[$sub] = array();
$portions[$sub][] = $emails[$i];
endfor;
print_r($portions);die;
我想在兩個級別上按升序對數組進行排序,這樣:
array( ['ma'] = array(
'martinu@yahoo.com',
'martina@post.com',
'marti@nette.com'),
['du'] = array(
'durkac@email.com',
'durek@net.com',
'dundy@gmail.com') )
會變成這樣:
array(
['du'] = array(
'dundy@gmail.com',
'durek@net.com',
'durkac@email.com' ),
['ma'] = array(
'marti@nette.com',
'martina@post.com',
'martinu'@yahoo.com' )
)
我找不到這樣的例子如何歸檔這個。 我不清楚是否可以使用 array_multisort 或者我是否需要編寫自己的回調 function。 如果需要 usort,您能否舉例說明如何對其進行排序?
編輯:我希望兩個級別中允許的字符都基於https://tools.ietf.org/html/rfc5322
ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
出於我的目的,我只需要對兩個字符進行排序。
我建議這樣做:
一步完成您的strtolower
/ trim
轉換。
$emails = file("exported_addresses.txt");
foreach ($emails as $i => $email) {
$emails[$i] = strtolower(trim($email));
}
然后排序。
sort($emails);
然后按 substring 分組。
$portions = [];
foreach ($emails as $email) {
$portions[substr($email, 0, 2)][] = $email;
}
由於您在分組之前已經進行了排序,因此組和其中的所有內容都將以正確的順序結束。
首先,我們像這樣使用 file_get_contents() 獲取文件內容。
$data = file_get_contents('./text.txt');
在此之后,我們對數組進行排序。 即數組是:
$data =array(
'ma' => array(
'martinu@yahoo.com',
'martina@post.com',
'marti@nette.com'),
'du' => array(
'durkac@email.com',
'durek@net.com',
'dundy@gmail.com') );
**Solution:**
$c=[];
foreach ($a as $k=>$v) {
sort($v);
$c[$k]=$v;
}
ksort($c);
Output:
Array
(
du => Array
(
[0] => dundy@gmail.com
[1] => durek@net.com
[2] => durkac@email.com
)
ma =>
[0] => marti@nette.com
[1] => martina@post.com
[2] => martinu@yahoo.com
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.