0

データベース内のすべてのメンバーを含むメンバーリストを作成しようとしていますが、それらはフロントネームベースで存在しています。だから私はそれらを印刷する前に姓を最初に入れようとしています.

そのために、私はこの関数を書きました:

function surname($name){
    $exploded = explode(" ", $name);
    $num = count($exploded);

    $move = $exploded[$num - 1];
    unset($exploded[$num - 1]);
    array_unshift($exploded, $move);
    $name = implode(", ", $exploded);
    return $name;
}

そして、それを使用しながら、私は正しいと呼ばれる人々の配列を作ろうとしています. (mysqlは姓ではなく前名でソートするため、配列を後でソートしたい)

                $names = array();
                $sql = "SELECT * FROM Members";
                $self = mysql_query($sql);
                while ($row = mysql_fetch_array($self)) {
                    $name = $row["name"];
                    $name = surname($name);
                    array_push($names, $name);
                }               
                echo $names;

ただし、これは何も返しません。これは、配列がループごとに再作成されているためだと思います。

私の質問は、これは有効な方法ですか、それともまったく別のことをしなければなりませんか?

助けてください。

4

2 に答える 2

0

このようなものは、テストされていないことに注意してください

SELECT * FROM Members ORDER BY SUBSTRING_INDEX(name, ' ', -2)

最初のスペースの右側に表示される最初の 2 つの単語を選択する必要があります。これにより、ミドルネームと姓を許可する必要があります。

OK、これもうまくいきますが、面倒/計算が重いですが、うまくいきます。ループ内のループは恐ろしいですが、データベースを適切な構造に修正することはできませんが、これはあなたが得るのと同じくらい良いものです(正規表現の黒魔術に行きたくない限り.

$surnamesarray = array();
 $sql = "SELECT * FROM Members";
                $self = mysql_query($sql);
                while ($row = mysql_fetch_array($self)) {
                    $temparray = explode(" ",$row['name']);
                    $substring = "";
                    for ($i=0;$i<count($temparray);$i++) {
                     $substring .= " ".$temparray[$i];
                    }
                    $surnamesarray[] = trim($substring)
                }

// now we just array sort so 
sort($surnamesarray);
var_dump($surnamesarray);//you would now for each this array again to display i'm just dumping out here
于 2013-07-07T22:17:49.707 に答える
0

ループで、秒$nameを変更してから$names[]エコーしないprint_r($names)で、配列プッシュを削除してみてください

于 2013-07-07T22:21:16.870 に答える