我已经在这里看过一百万个这样的线程,并通读每一个。那,加上一些严肃的谷歌搜索。
更新:我正在重写此帖子以包含完整的代码和解释,因此每个人都了解正在发生的事情以及我想要做的事情。
我正在使用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;
}
没什么复杂的。我所要做的就是检查循环中的单个字符是否与我的字母数组匹配。
正如下面的Col.Srapnel所说,我做了一些调试,来自$ alphabet和$ foundLetters数组的dump()
个字母会产生不同的结果,所以我猜它确实指出了
可能的编码问题,我现在想弄清楚......
有谁知道这到底是怎么回事?
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
)
答案 0 :(得分:3)
从文件中收到你的来信,是吗? :)
使用var_dump
代替,或者使用print_r和trim进行比较:)
修改强>
使用此代码查看正在进行的操作
foreach ($alphabet as $letter) {
foreach ($empty_letters as $empty) {
dump($letter);
echo " ";
dump($empty);
echo "<br>";
if ($letter == $empty) {
echo "$letter was found in \$empty_letters<br>\n";
break;
}
}
}
function dump(&$str) {
$i=0;
while (isset($str[$i])) echo strtoupper(dechex(ord($str[$i++])));
}
答案 1 :(得分:2)
为我工作
答案 2 :(得分:0)
你的样本中唯一奇怪的是:在foreach之后出现 - 然后是大括号会导致语法错误。这是问题,还是你的程序没有输出任何内容?
答案 3 :(得分:0)
我也得到了预期的结果。但我认为你的示例数组与你实际传递的不同。试一试......
foreach(array_values($alphabet) as $letter){
echo $letter . '<br />'; // Correctly prints out every letter from $alphabet.
if(in_array($letter, $emptyLetters)) { // $strict is set
// do something
echo 'found';
}
}