[英]in_array does not seem to work while inside a function
我有此代码,将检查数组包含特定的字符串并输出所需的数据,但是它在函数内部,因此使用串联“。=”完成输出,我确实尝试了in_array函数的基本形式,即
$show = array();
$show[] = "dog";
$show[] = "doga";
$show[] = "dogasd";
$show[] = "cat asd";
print_r($show);
if(in_array("cat asd", $show))
{
echo "found";
}
else
{
echo "not found";
}
它正在工作,但是在这里:
public function personal(){
$sql_field = "SELECT * FROM somewhere WHERE show_field = 1";
$result = mysql_query($sql_field);
$num = mysql_num_rows($result);
$show = array();
for($i=0;$i<$num;$i++)
{
$row = mysql_fetch_assoc($result);
$show[] = $row['field_name']."<br>";
}
$block .= "<tr>";
$block .= $show[0];
if(in_array("firstName", $show))
{
$block .= "<td style=\"width: 250px;\"><div class=\"fields\"><input type=\"text\" title=\"First Name*\" value=\"{$this->detail("firstName")}\" name=\"first_name\" class=\"placeholder textbox-long\" /></div></td>";
}
if(in_array("lastName", $show))
{
$block .= "<td style=\"width: 250px;\"><div class=\"fields\"><input type=\"text\" title=\"Last Name*\" value=\"{$this->detail("lastName")}\" name=\"last_name\" class=\"placeholder textbox-long\" /></div></td>";
}
$block .= "</tr>";
}
它总是输出false,因此不显示任何内容,我尝试使用非数组变量对其进行了测试,并且其工作正常,因此我猜想数组在函数内部无法正常工作吗? 如果我在这里错了,请纠正我。 我需要此功能的阵列才能使任何想法的人工作?
谢谢 :)
in_array()
在函数内部正常工作,但是您期望它搜索子字符串,但不会。 如果要搜索firstName<br>
,它将找到您要查找的内容,因为您将firstName<br>
添加到了数组中,但是firstName
不在数组中。
乍一看,我所看到的只是你.<br>
最后可能阻止了它找到确切的短语。
更改:
for($i=0;$i<$num;$i++)
{
$row = mysql_fetch_assoc($result);
$show[] = $row['field_name']."<br>";
}
至:
for($i=0;$i<$num;$i++)
{
$row = mysql_fetch_assoc($result);
$show[] = $row['field_name'];
}
然后尝试一下。
您是否尝试过in_array('firstName<br>')
? 在填充数组时,在此处的值中添加一个break标记: $show[] = $row['field_name']."<br>";
...
顺便说一句:用一会儿代替foreach,更好……诚实!
按要求
这是我的写法:
$sql_field = "SELECT * FROM somewhere WHERE show_field = 1";//I'd only select the fields I needed
$result = mysql_query($sql_field);
//$result holds the resource, not the actual array
//That's why you can do this:
$show = array();
$firstName = $lastName = '';//in_array is slow, so store the values seperatly
while ($row = mysql_fetch_assoc($result))
{
$show[] = $row['field_name'].'<br/>';
//I'm a bit of a nitpicker, but should be <br/> :-)
if ($row['field_name'] === 'firstName')
{
$firstName = '<td style="width: 250px;"><div class="fields"><input type="text" title="First Name*" value="'.$this->detail("firstName").'" name="first_name" class="placeholder textbox-long" /></div></td>';
//use single quotes, a little faster, and less backslashes
}
if ($row['fieldName'] ==='lastName')
{
$lastName = '<td style="width: 250px;"><div class="fields"><input type="text" title="Last Name*" value="'.$this->detail("lastName").'" name="last_name" class="placeholder textbox-long" /></div></td>';
}
}//while ends when all results have been fetched
$block .='<tr>'.$show[0].$firstName.$lastName.'</tr>';
这样,如果未返回名字和姓氏,则字符串为空。 结果是一样的。 更好的解决方案是创建一个数组$temp=array('firstName'=>'','lastName'=>'');
只是做这样的事情
if($temp[$row['fieldName']])
{
$temp[$row['fieldName']] = '<td style="width: 250px;"><div class="fields"><input type="text" title="'.ucfirst(substr($row['fieldName'],0,-4)).' Name*" value="'.$this->detail($row['fieldName']).'" name="'.substr($row['fieldName'],0,-4).'_name" class="placeholder textbox-long" /></div></td>';
}
或者您可以使用(v)sprintf ...您的选择是无限的。
更多信息:
http://www.php.net/mysql_fetch_assoc (例子!)
在这些页面之一中,您会找到解释为什么在这种情况下更好的原因。
如果您感觉像C样式的字符串格式:
http://www.php.net/manual/zh/function.vsprintf.php
http://www.functions-online.com/
现在,该代码已经过测试,也不知道您想在哪里使用像我提供的解决方案那样的解决方案,所以请不要以为这是一个完全验证的,随时可以使用的代码。
记得:
“调试是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,那么就定义而言,您就不够聪明,无法对其进行调试。” —布赖恩·克尼根(Brian Kernighan)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.