我正在尝试创建一个包含数据库中所有成员的成员列表,但是它们以正面名称存在。所以我试图在打印之前先把姓氏放进去。
为此,我写了这个函数:
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;
然而,这并没有给出任何回报,我认为这是因为数组正在重建每个循环。
所以我的问题是,这是一种有效的方式,还是我必须做一些完全不同的事情?
请帮忙。
答案 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)
并尝试删除数组推送