通过函数的返回值设置数组的值

时间:2014-06-23 08:47:03

标签: php arrays

我有一个数组,值是从函数(或应该是)动态获得的,你可能会看到下面的例子。但看起来它并没有像预期的那样发挥作用。这种用法是错误的吗?

$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;

}

功能如上所述但是什么都没设置,打印数组也是空的。

2 个答案:

答案 0 :(得分:0)

你做错了就是在你的函数中使用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

答案 1 :(得分:0)

更改您的功能:

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

编辑:通过@deceze

更正了退出功能的功能