$id = 1;
foreach (@products) {
$productid$id = param(product$id);
++$id;
}
我正在尝试遍历产品数组,并为产品中的每个商品创建一个新变量,用于使用复选框选择待售产品的表单。我试图使用$ productid $ id和$ productid" $ id"但它返回了语法错误。有没有办法实现这个目标?
答案 0 :(得分:4)
我正在尝试遍历products数组并为产品中的每个项目创建一个新变量。
虽然可以为每个项目创建一个新变量,但这是一个坏主意。它们必须是全局的,语法是丑陋的,并且很难将这些变量作为集合传递。相反, 使用哈希或数组 。在这种情况下,由于您的项目按编号索引,并且没有间隙,因此数组最有意义。
my @product_params;
foreach my $product (@products) {
push @product_params, param($product);
}
对于$product
中的每个@products
,它会将param($product)
添加到@product_params
。例如,$products[5]
的参数存储在$product_params[5]
。
由于这是@products
与其参数的一对一映射,因此使用map
执行上述操作更容易,更快捷。映射通过函数运行列表的每个元素以创建新列表。 $_
依次包含@products
的每个元素。
my @product_params = map { param($_) } @products;
答案 1 :(得分:3)
更新:您的更改使上述两个项目符号无效。
my $id = 1;
for my $product (@products) {
$product_id = param("product$id");
++$id;
}
答案 2 :(得分:1)
假设您有四个名为
的复选框product1
product2
product3
product4
说出product1
和product3
。
以下内容会将1
和3
放入@selected_product_ids
:
my @selected_product_ids =
map { my ($id) = /^product(\d+)\z/; defined($id) && param($_) ? $id : () }
params();
如果您拥有@product_ids
中所有现有产品ID的列表,则以下内容也会相同:
my @selected_product_ids =
grep { param("product$_") }
@product_ids;