人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで以下のような配列があります。
TEST1_ARRAY:
array
'TEST1-AAA' => '★A1'
'TEST1-BBB' => '★A2'
'TEST1-CCC' => 'A3'

TEST2_ARRAY:
array
'TEST2-AAA' => '★A4'
'TEST2-BBB' => 'A5'

でこのTEST1_ARRAYとTEST2_ARRAYをPHPのarray_mergeで一緒にすると
以下のようになります。

array
'TEST1-AAA' => '★A1'
'TEST1-BBB' => '★A2'
'TEST1-CCC' => 'A3'
'TEST2-AAA' => '★A4'
'TEST2-BBB' => 'A5'

で、これをですね、以下のようにするにはどうしたらいいでしょうか?
'TEST1-AAA' => '★A1'
'TEST1-BBB' => '★A2'
'TEST2-AAA' => '★A4'
'TEST1-CCC' => 'A3'
'TEST2-BBB' => 'A5'

最終的には、foreachでまわしながら、値に★があれば TEST3_ARRAYに入れて
それ以外はTEST4_ARRAYに入れて、再度、array_mergeすれば
いいんじゃないかなーと思うのですが、なんか、いい感じの関数みたいの
ご存知でしたら、教えて下さい。

以上、よろしくお願いします。

●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:A1 A3 AAA CCC PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● horonict
●35ポイント

uasort関数を使ってみました。

http://jp2.php.net/manual/ja/function.uasort.php

ただし、スクリプトの文字コードは UTF-8 限定です。

<?php
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

//質問通りの並べ替えを実現する
function ore_sort($a, $b) {
 $pat = '/(★)?([^★]*)/ui';
 preg_match($pat, $a, $ra);
 preg_match($pat, $b, $rb);
 if ($ra[1] == $rb[1]) $res = strcmp($ra[2], $rb[2]);
 else $res = strcmp($b, $a);
 return $res;
}

$arr = array(
'TEST1-AAA' => '★A1',
'TEST1-BBB' => '★A2',
'TEST1-CCC' => 'A3',
'TEST2-AAA' => '★A4',
'TEST2-BBB' => 'A5',
);

var_dump($arr);
uasort($arr, "ore_sort");
var_dump($arr);
?>
◎質問者からの返答

ありがとうございます。

ですが、自分が悪いのですが、こちらの環境は、EUC-JPになります。

なので、EUC-JPの場合はどうしたらいいのでしょうか?


2 ● GoldenDawn
●35ポイント

別のやり方で。

<?php
$arr = array(
 'TEST1-AAA' => '★A1',
 'TEST1-BBB' => '★A2',
 'TEST1-CCC' => 'A3',
 'TEST2-AAA' => '★A4',
 'TEST2-BBB' => 'A5',
 );

$result = array_filter($arr, create_function('$a', 'return strpos($a, "A") > 0;'))
+ array_filter($arr, create_function('$a', 'return strpos($a, "A") == 0;')) ;

print_r($result) ;
?>
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ