我可以在数组中搜索字符串没问题;这有效:
if (in_array('animals', $value[tags])){
echo "yes";
}
但是如何检查数组中的变量?这似乎不起作用:
$page_tag = 'animals';
if (in_array($page_tag, $value[tags])){
echo "yes";
}
我猜我错过了一些简单的语法doodad?
阵列非常庞大,所以我会尝试展示它的样本。它存储在一个单独的php文件中,并“包含”在其他地方。
global $GAMES_REPOSITORY;
$GAMES_REPOSITORY = array (
"Kitten Maker" => array (
"num" => "161",
"alt" => "Kitten Maker animal game",
"title" => "Create the kitten or cub of your dreams!",
"tags" => array ("animals", "feline", "cats", "mega hits"),
),
}
这是代码的更大部分,放入上下文中。它从大约400个游戏的数组中拉出来,然后拉出具有特定标记的游戏:
function array_subset($arr) {
$newArray = array();
foreach($arr as $key => $value) {
if (in_array($page_tag, $value["tags"])){
if(is_array($value)) $newArray[$key] = array_copy($value);
else if(is_object($value)) $newArray[$key] = clone $value;
else $newArray[$key] = $value;
}
}
return $newArray;
}
function array_copy($arr) {
$newArray = array();
foreach($arr as $key => $value) {
if(is_array($value)) $newArray[$key] = array_copy($value);
else if(is_object($value)) $newArray[$key] = clone $value;
else $newArray[$key] = $value;
}
return $newArray;
}
$games_list = array();
$games_list = array_subset($GAMES_REPOSITORY);
$games_list = array_reverse($games_list);
哦,一个有趣的暗示。在其他地方,它使用$ _GET工作:
if (in_array($_GET[tagged], $value[tags])){
答案 0 :(得分:1)
in_array()函数可以检查变量,因此您的问题很可能来自其他地方。确认您已正确定义了常量标记。如果没有定义,则可能不起作用,具体取决于您的PHP版本。有些版本只是假设您要编写字符串标记而不是名为标记的常量。
您的代码有效。以下是我测试过的完整示例:
<?php
const tags = "tags";
$page_tag = 'animals';
$value = array('tags' => array("fruits", "animals"));
if (in_array($page_tag, $value[tags])){
echo "yes";
}
答案 1 :(得分:1)
你有一个数组数组,所以in_array()不会工作,因为你已经将它编写为数组中存在的测试,而不是子数组。您也可以像这样循环遍历数组:
foreach($GAMES_REPOSITORY as $name =>$info) {
if(in_array($page_tag, $info['tags']))
{ whatever }
}
如果速度不够快,则必须通过提前循环并创建标记索引来缓存标记。
答案 2 :(得分:1)
我终于可以正常工作了!我不完全理解为什么,但是我不得不直接将变量输入函数。由于某种原因,它不会从父函数中提取变量。但是现在它可以工作了,甚至需要两个动态变量:
function array_subset2($arr, $tag1, $tag2) {
$newArray = array();
foreach($arr as $key => $value) {
if (in_array($tag1, $value['tags'])){
if (in_array($tag2, $value['tags'])){
if(is_array($value)) $newArray[$key] = array_copy2($value);
else if(is_object($value)) $newArray[$key] = clone $value;
else $newArray[$key] = $value;
}
}
}
return $newArray;
}
function array_copy2($arr) {
$newArray = array();
foreach($arr as $key => $value) {
if(is_array($value)) $newArray[$key] = array_copy2($value);
else if(is_object($value)) $newArray[$key] = clone $value;
else $newArray[$key] = $value;
}
return $newArray;
}
$games_list = array();
$games_list = array_subset2($GAMES_REPOSITORY, $page_tag, $featured_secondary_tag);