I've seen a million of these threads here already, and read through every single one. That, plus some serious Googling.
UPDATE: I am rewriting this post to include complete code and explanation, so everyone understands what is going on and what I am trying to do.
I am developing using CodeIgniter, so some syntax may look weird if you are not familiar with it.
I have an link bar with letters A-Z. The idea is to find only "active" letters that have content in a particular column (mysql LIKE $letter%
). With this information I would be able to "dim" certain "empty" letters if there are any, using CSS.
This function here queries mysql and gets each unique first letter of entries in a column. The result should be anywhere from 0 to 26 matches/array items.
//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;
}
After that, I call this function from a controller:
$foundLetters = $this->am_model->getFirstLetter($domainId);
then define an $alphabet
array.
$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;
}
Nothing complicated. All I have to do is check if a single character in a loop matches my alphabet array.
As Col. Shrapnel suggested below, I did some debugging, and dump()
of letters from $alphabet and $foundLetters arrays produce different results, so I guess it does point
to possible encoding issues, which I am trying to figure out now...
Does anyone have any idea what the hell is going on here??
function dump(&$str) {
$i=0;
while (isset($str[$i])) echo strtoupper(dechex(ord($str[$i++])));
}
Here is the result from dump()
:
a: $alphabet->61 613C6272202F3E<-$foundLetters
b: $alphabet->62 613C6272202F3E<-$foundLetters
c: $alphabet->63 683C6272202F3E<-$foundLetters
d: $alphabet->64 613C6272202F3E<-$foundLetters
and these:
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
)