Я уже видел миллион из этих тем и прочитал все. Это плюс серьезный поиск в Google.
ОБНОВЛЕНИЕ: Я переписываю этот пост, чтобы включить полный код и пояснения, чтобы все понимали, что происходит и что я пытаюсь сделать.
Я занимаюсь разработкой с использованием CodeIgniter, поэтому некоторый синтаксис может выглядеть странно, если вы не знакомы с ним.
У меня есть панель ссылок с буквами A-Z. Идея состоит в том, чтобы найти только «активные» буквы, которые имеют содержание в определенном столбце (mysql LIKE $letter%
). С помощью этой информации я смогу "затемнить" некоторые "пустые" буквы, если они есть, с помощью CSS.
Эта функция здесь запрашивает mysql и получает каждую уникальную первую букву записей в столбце. Результат должен быть от 0 до 26 совпадений / элементов массива.
//From am_model.php
function getFirstLetter($domainId)
{
$q = $this->db->query("SELECT DISTINCT LEFT(alias_name, 1)
AS letter
FROM am_aliases
WHERE domain_id = '" . $domainId . "'
ORDER BY alias_name;");
if($q->num_rows > 0):
foreach($q->result() as $row)
{
$result[] = $row;
}
//print_r($result); <-- prints out correct result.
return $result;
endif;
}
После этого я вызываю эту функцию из контроллера:
$foundLetters = $this->am_model->getFirstLetter($domainId);
затем определите массив $alphabet
.
$alphabet = range('a','z');
foreach($alphabet as $letter)
{
if(in_array($letter, $foundLetters, TRUE)):
echo $letter . ' found<br />';
else:
echo $letter . ' not found<br />';
endif;
}
Ничего сложного. Все, что мне нужно сделать, это проверить, соответствует ли один символ в цикле моему алфавитному массиву.
Как предложил полковник Шрапнель ниже, я провел некоторую отладку, и dump()
букв из массивов $ alphabet и $ foundLetters дают разные результаты, так что я думаю, что это указывает
к возможным проблемам кодирования, которые я пытаюсь выяснить сейчас ...
Кто-нибудь знает, что, черт возьми, здесь происходит?
function dump(&$str) {
$i=0;
while (isset($str[$i])) echo strtoupper(dechex(ord($str[$i++])));
}
Вот результат от dump()
:
a: $alphabet->61 613C6272202F3E<-$foundLetters
b: $alphabet->62 613C6272202F3E<-$foundLetters
c: $alphabet->63 683C6272202F3E<-$foundLetters
d: $alphabet->64 613C6272202F3E<-$foundLetters
и эти:
print_r($alphabet); // all 26 letters
Array (
[0] => a
[1] => b
[2] => c
...
[23] => x
[24] => y
[25] => z
)
print_r($foundLetters); // dynamic array.
Array (
[0] => b
[1] => s
)