Я пытаюсь создать список членов со всеми членами в базе данных, однако они находятся там на основе имени. Поэтому я пытаюсь сначала поместить фамилию, прежде чем печатать их.make array of names php
Для этого я написал эту функцию:
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 сортирует по лицевому имени вместо фамилии, поэтому я хочу, чтобы отсортировать aftarwards массива)
$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;
Это, однако, не дает ничего взамен, я думаю, это потому, что массив переделывается каждый цикл.
Итак, мой вопрос, это правильный способ сделать это или мне нужно сделать что-то совершенно другое?
Пожалуйста, помогите.
с регулярным выражением вы можете сделать, что 'surname' функция простой один лайнер:' возвращение preg_replace ('/ (\ W +) \ s + (\ w +)/',' $ 2, $ 1 ', $ name); ' – elclanrs
Но это работает только в том случае, если имеется только 2 слова? Имена, которые у меня есть, могут иметь 2 или более. (Думаю, 4 это текущий макс, но я хочу оставаться открытым для людей с сумасшедшими именами) – Coolcrab
Имена практически невозможно проверить, что бы вы ожидали от «Miguel Perez de Francisco», например? Мой код выше ошибочен, но так же все остальные решения, потому что имена непредсказуемы. В идеале у вас было бы два разных поля: одно для имени и одно для фамилии и хранить их отдельно в БД, но, похоже, слишком поздно это делать ... – elclanrs