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


Setting an array's value via a function's return value

我有一个数组,它的值是动态地从一个函数(或应该是)获得的,您可以看到下面的例子。但看起来并没有像预期的那样起作用。这个用法有问题吗?

$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