前提・実現したいこと
PHPで多次元連想配列をソートする機能を作っています。
該当のソースコードの出力結果である
$post_datas
ですと「1,3,2,4」の順になりますが、
$post_ids
と同様に「1,2,3,4」の順にソートしたいです。
該当のソースコード
以下がソート対象である$post_datas
を生成するコードになります。
最後のvar_export( $post_datas )
で「1,3,2,4」の順になります。
※これは変更できません。
php
1function get_post_type( $post_id ){ 2 if( $post_id & 1 ){ 3 $number = 'odd'; 4 }else{ 5 $number = 'even'; 6 } 7 return $number; 8} 9 10function get_post_data( $post_id ){ 11 $post_type = get_post_type($post_id); 12 $post_data = [ 'post_type'=>$post_type, $post_type.'_id'=>$post_id ]; 13 return $post_data; 14} 15 16$post_ids = [1,2,3,4]; 17foreach( $post_ids as $post_id ){ 18 $post_data = get_post_data($post_id); 19 $post_type = $post_data['post_type']; 20 if( $post_type=='odd' ){ 21 $odd_datas[] = $post_data; 22 }else{ 23 $even_datas[] = $post_data; 24 } 25} 26 27$post_datas = array_merge( $odd_datas, $even_datas ); 28var_export( $post_datas ); // 1,3,2,4の順になる
試したこと
ソートするキーは「××_id」なので、このようにソートのためのコードを実行しました。
しかし、ソートされるキーが不定なためでしょうか、次のエラーになってしまいます。
php
1 2foreach($post_datas as $key=>$value){ 3 $post_type = $post_data['post_type']; 4 $result[$key] = $value[$post_type.'_id']; 5} 6array_multisort( $result, SORT_ASC, $post_datas );
エラーメッセージ
そのエラーがこちらです。
PHP Notice: Undefined index: even_id in /test.php on line 35 PHP Notice: Undefined index: even_id in /test.php on line 35
補足情報
該当のソースコードにある$post_datas
に、$post_type.'_id' => $post_id
だけでなく'post_id' => $post_id
などの不定ではないキーを追加すればいい話ですが、それはなしで、不定のキーとしての方法を模索しています。
なお、ソートキーは「××_id」ですが、その「××」の部分は必ず「$post_type
の値」が入ります。
以上になります。不備等ございましたらご指摘ください。
ご回答宜しくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー