2012-08-04 61 views
0

这里数组的关键是如何设置我的数组:PHP:获取匹配特定值

$Post_Cat_Array = array(); 
while($row = mysql_fetch_array($result)) { 
$Post_Cat_Array[$row['type_id']] = $row['type_name'];} 

在此功能,我需要得到type_id(密钥)的特定type_name(值)

function NameToID($input){ 
echo array_search($input, $Post_Cat_Array); 
} 

和我这样调用该函数:

NameToID($_POST['type']); 

但它不工作。它不回应任何东西。我确定$_POST['type']包含正确的值。

注意:$_POST['type']的值是以阿拉伯语为准。与数组的所有值相同。

+1

请不要使用'mysql_ *'函数来编写新代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。请参阅* [红盒子](http://goo.gl/GPmFd)*?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。 – 2012-08-04 08:16:19

+0

当你用你的SQL代码打印数组后,你看到了什么:print_r($ Post_Cat_Array); ? – 2012-08-04 08:24:49

回答

1

看起来$Post_Cat_Array超出了范围。修改你的函数:

function NameToID($input, $arr){ 
    echo array_search($input, $arr); 
} 

然后:

NameToID($_POST['type'], $Post_Cat_Array); 

PHP Variable scope

因为echo语句 指的是本地版本该脚本将不会产生任何输出( ...)变量,并且在此范围内并没有被 赋值。

+0

谢谢。它现在有效。 – xperator 2012-08-04 08:29:13

+1

我编辑了我的答案,有一个关于变量作用域的PHP文档的链接。简而言之:函数内部的变量具有不同的范围,所以除非您将它们作为参数传递或将它们标记为'global',否则其他(* outside *)变量将无法访问。 – Zbigniew 2012-08-04 08:31:59

1

这是因为你的数组变量对你的函数是不知道的。您可以使用以下任一方法来实现:

<?php 
$Post_Cat_Array=array(); 
$Post_Cat_Array["key1"]="value1"; 
$Post_Cat_Array["key2"]="value2"; 
$Post_Cat_Array["key3"]="value3"; 
$Post_Cat_Array["key4"]="value4"; 

echo NameToID("value4"); 
echo "<br>"; 
echo NameToID2("value4",$Post_Cat_Array); 

function NameToID($input){ 
    global $Post_Cat_Array; 
    echo array_search($input, $Post_Cat_Array); 
} 
function NameToID2($input,$values){ 
    echo array_search($input, $values); 
} 
?>