私はかなり面倒な配列構造を使用しており、任意のキーの組み合わせで並べ替える必要があります。以下に 2 つのレコードが表示されますが、並べ替えが実行されると、同じ構造を持つ、または持たない複数のレコードが存在します。
ここに2つのレコードがあります。
Array(
[0] => Array
(
[cid] => 1
[title] => Mr
[first_name] => Abet
[last_name] => Simbad
[emails] => Array
(
[374] => Array
(
[eid] => 374
[name] => ski lodge
[email] => simbad@skifree.com
)
[373] => Array
(
[eid] => 373
[name] => work
[email] => simbad@work.com
)
[375] => Array
(
[eid] => 375
[name] => personal
[email] => simbad@gmail.com
)
)
)
[1] => Array
(
[cid] => 2
[title] => Mrs
[first_name] => Angie
[last_name] => Stokes
[emails] => Array
(
[590] => Array
(
[eid] => 590
[name] => work
[email] => angie@gmail.com
)
)
)
email
では、配列内で昇順で並べ替えたい場合、どうすればemails
2 番目の完全なレコードが結果配列で最初になるように取得できますか? angie@gmail.com は simbad@ の前に来ます....
また、一部のレコードにはメール配列が含まれません。それらは結果セットの最後になります。どんな助けでも大歓迎です。
示されている配列は削減されたバージョンですが、住所、メモ、電話、および Web サイトが同じ煩わしい構造になっています。理想的には、次のようなもので並べ替えることができます
$sort = array('emails','email')
$data = sort_data_func('ASC',$sort,$data);
しかし、正しい方向に進むことは何でも役に立ちます。:)
ここに私がこれまでに持っているいくつかのコードがあります
$sort = array('emails','email');
foreach($contacts as $ckey => $c){
if(is_array($c[$sort[0]])){
foreach($c[$sort[0]] as $key1 => $sort0){
if($sort0[$sort[1]]!=''){
$res[$sort[0]][$ckey][$sort[1]][] = $sort0[$sort[1]];
}
}
}
}
print_r($res);
生成するもの:
Array
(
[emails] => Array
(
[0] => Array
(
[0] => simbad@skifree.com
[1] => simbad@work.com
[2] => simbad@gmail.com
)
[1] => Array
(
[0] => angie@gmail.com
)
)
)
しかし、ここからどこへ行くべきかわかりません。
EDIT OK 正しい順序でレコードを取得しましたが、結果の配列に最初のレコード ID を保持するにはどうすればよいですか? これが私が使用しているものです。
$direction=='ASC'
function cmp_asc($a, $b){
$key = current(array_keys($a));
sort($a[$key]);
$a[$key] = current($a[$key]);
sort($b[$key]);
$b[$key] = current($b[$key]);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
function cmp_desc($a, $b){
$key = current(array_keys($a));
asort($a[$key]);
$a[$key] = current($a[$key]);
asort($b[$key]);
$b[$key] = current($b[$key]);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
if($direction=='ASC'){
usort($res[$sort[0]], 'cmp_asc');
}else{
usort($res[$sort[0]], 'cmp_desc');
}
の
Array
(
[emails] => Array
(
[0] => Array
(
[email] => Array
(
[0] => simbad@skifree.com
[1] => simbad@work.com
[2] => simbad@gmail.com
)
)
[1] => Array
(
[email] => Array
(
[0] => angie@gmail.com
)
)
)
)
外
Array
(
[emails] => Array
(
[0] => Array
(
[email] => Array
(
[0] => angie@gmnail.com
)
)
[1] => Array
(
[email] => Array
(
[0] => simbad@skifree.com
[1] => simbad@work.com
[2] => simbad@gmail.com
)
)
)
)