phpの質問です

たかなまな
という5文字を全文字を並び替えたものを、全組み合わせ名前の順に表示したいです。どのようなコードを組めばいいでしょうか?
暗記しなくてはいけない文字をここに入れて覚えやすそうなものを一覧から見つけて覚えるみたいに使いたいです
ほかの文字や文字数でも使えるよう汎用性の高いのを教えてください

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2014/11/21 15:14:53
  • 終了:2014/11/26 20:43:33
id:tattakata

なんとかここまではネット見てかけました

<?php

$str ='あいうえお1248朝食';
$str = strShuffleUtf8($str);
print mb_convert_encoding($str,'SJIS-win','UTF-8');
print "<br>";
$str = strShuffleUtf8($str);
print mb_convert_encoding($str,'SJIS-win','UTF-8');
print "<br>";
$str = strShuffleUtf8($str);
print mb_convert_encoding($str,'SJIS-win','UTF-8');
print "<br>";
$str = strShuffleUtf8($str);
print mb_convert_encoding($str,'SJIS-win','UTF-8');
print "<br>";
$str = strShuffleUtf8($str);
print mb_convert_encoding($str,'SJIS-win','UTF-8');
print "<br>";
$str = strShuffleUtf8($str);
print mb_convert_encoding($str,'SJIS-win','UTF-8');
print "<br>";

function strShuffleUtf8($str) {
    $work_array = array();
    $work_array = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
    shuffle($work_array);
    return implode("", $work_array);
}
?>

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4488ベストアンサー獲得回数18572014/11/21 18:52:51

ポイント250pt

http://www.softel.co.jp/blogs/tech/archives/2263
↑を参考にして、文字列を出力できれば良いだけだったら、配列に貯める必要ないじゃんって思った(随分と早くなるはず)。

<?php
function echo_pat($a, $s = '')
{
    $r = array();
    if (count($a) && is_array($a)) {
        foreach ($a as $k => $v) {
            $_s = $s . $v;
            $_a = $a;
            unset($_a[$k]);
            $_r = echo_pat($_a, $_s);
#           $r = array_merge($r, $_r);
        }
    } else {
#       $r[] = $s;
        echo $s . "\n";
    }
    return $r;
}

#$s = "123";
$s = "たかなまな";
$a = preg_split("//u", $s, -1, PREG_SPLIT_NO_EMPTY);
echo_pat($a);

?>

配列でほしければ、関数内の # を二か所外して、echo をコメントアウト。

ideone.com で試してみたのが、こちら。
http://ideone.com/RSqdGk

他1件のコメントを見る
id:greuetyo

文字化けしちゃいます。どうすればいいですか?

2014/11/21 21:57:36
id:a-kuma3

php のスクリプトが、Unicode じゃないのだと思います。
Unicode で保存して、実行してみてください。

2014/11/21 23:01:54

その他の回答(1件)

id:Lhankor_Mhy No.1

Lhankor_Mhy回答回数779ベストアンサー獲得回数2312014/11/21 18:37:57

ポイント250pt

順列を生成するPHPプログラムを書いてみたよ! - おもしろ日記パワー
↑こちらが参考になるかと思います。あとはjoinしてsortすればいいかと思います。

id:a-kuma3 No.2

a-kuma3回答回数4488ベストアンサー獲得回数18572014/11/21 18:52:51ここでベストアンサー

ポイント250pt

http://www.softel.co.jp/blogs/tech/archives/2263
↑を参考にして、文字列を出力できれば良いだけだったら、配列に貯める必要ないじゃんって思った(随分と早くなるはず)。

<?php
function echo_pat($a, $s = '')
{
    $r = array();
    if (count($a) && is_array($a)) {
        foreach ($a as $k => $v) {
            $_s = $s . $v;
            $_a = $a;
            unset($_a[$k]);
            $_r = echo_pat($_a, $_s);
#           $r = array_merge($r, $_r);
        }
    } else {
#       $r[] = $s;
        echo $s . "\n";
    }
    return $r;
}

#$s = "123";
$s = "たかなまな";
$a = preg_split("//u", $s, -1, PREG_SPLIT_NO_EMPTY);
echo_pat($a);

?>

配列でほしければ、関数内の # を二か所外して、echo をコメントアウト。

ideone.com で試してみたのが、こちら。
http://ideone.com/RSqdGk

他1件のコメントを見る
id:greuetyo

文字化けしちゃいます。どうすればいいですか?

2014/11/21 21:57:36
id:a-kuma3

php のスクリプトが、Unicode じゃないのだと思います。
Unicode で保存して、実行してみてください。

2014/11/21 23:01:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません