我有一个数组,它的值是动态地从一个函数(或应该是)获得的,您可以看到下面的例子。但看起来并没有像预期的那样起作用。这个用法有问题吗?
$products = array(
"saloon" => array(
array(
"id" => "23544",
"precise" => "unkown",
"pump" => "auto",
"density" => "5:3",
"name" => "Multi dose arranger",
"color" => "224,0,92",
"desc" => "....",
"cdate" => "12342315",
"support" => "#lab"
)// Goes like this.
)
),
"basic" => array(
//Goes on and on
),
"variable" => array(
)
);
array(
2=> array(
getProduct(16,"everyday"),
getProduct(24,"everyday")
),
3=> array(
getProduct(16,"everyday"),
getProduct(23,"everyday")
),
4=> array(
getProduct(16,"everyday"),
getProduct(24,"everyday")
)
);
function getProduct($id,$cat){
GLOBAL $products,$a;
// echo $a;
// print_r(is_array($products));
foreach ($products[$cat] as $product) {
if($product["id"]==$id){
$selectedProduct = $product;
break;
}
}
return $selectedProduct;
}
函数与上面的函数类似,但是没有设置任何内容,同样打印数组也返回空。
修改你的函数:
function getProduct($id,$cat){
global $products,$a;
foreach ($products[$cat] as $product) {
if($product["id"]==$id){
$selectedProduct = $product;
break; //Instead of exit
}
}
return $selectedProduct;
}
不要使用exit
,因为你想中断foreach的执行,而不是退出程序,使用break
代替。
编辑:更正退出函数的功能,感谢@ decize
你做错的是在你的函数中使用exit(它停止整个脚本执行)。您应该将函数更改为:
function getProduct($id,$cat){
global $products,$a;
// echo $a;
// print_r(is_array($products));
foreach ($products[$cat] as $product) {
if($product["id"]==$id){
return $product;
}
}
return false;
}
事实上,你不需要退出或打破,因为你可以简单地返回$product
,当你找到它。您还应该返回值,以防没有找到任何产品。在上面的示例中,在这种情况下返回false
。