制作一些名字php

时间:2013-07-07 22:09:27

标签: php mysql sorting names

我正在尝试创建一个包含数据库中所有成员的成员列表,但是它们以正面名称存在。所以我试图在打印之前先把姓氏放进去。

为此,我写了这个函数:

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;

然而,这并没有给出任何回报,我认为这是因为数组正在重建每个循环。

所以我的问题是,这是一种有效的方式,还是我必须做一些完全不同的事情?

请帮忙。

2 个答案:

答案 0 :(得分:0)

这样的事可能会发挥作用,但未经测试

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

它应该选择出现在第一个空格右侧的前2个单词。这应该允许中间名和姓。

好的,这也会起作用,它的凌乱/计算重,但有效。循环中的循环很糟糕,但是没有将你的数据库固定到一个合适的结构,这是你能得到的好(除非你想进入正则表达式的黑魔法。

$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

答案 1 :(得分:0)

在你的循环中,将第二个$name更改为$names[]然后不回显print_r($names)并尝试删除数组推送