用php连接数组中的字符串
很抱歉问你这个新手问题。还在学习 我想这样做:用php连接数组中的字符串,php,arrays,Php,Arrays,很抱歉问你这个新手问题。还在学习 我想这样做: $product = $productdata['productinfo']['product']; //canvas $availableSizes = $productdata["productinfo"]["sizes"]; // 8x10 and 10x10 $material = array("matte","luster"); $result = array_map(function ($x, $y) { return $pro
$product = $productdata['productinfo']['product']; //canvas
$availableSizes = $productdata["productinfo"]["sizes"]; // 8x10 and 10x10
$material = array("matte","luster");
$result = array_map(function ($x, $y) { return $product . "_" . $x . '_' . $y; }, $availableSizes, $material);
我希望合并这些值,以便结果为数组中的4个值:
Array
(
[0] => canvas_8x10_matte
[1] => canvas_8x10_luster
[2] => canvas_10x10_matte
[3] => canvas_10x10_luster
)
试过这样的方法:
$product = $productdata['productinfo']['product']; //canvas
$availableSizes = $productdata["productinfo"]["sizes"]; // 8x10 and 10x10
$material = array("matte","luster");
$result = array_map(function ($x, $y) { return $product . "_" . $x . '_' . $y; }, $availableSizes, $material);
但它只给我带来了两个价值:
Array
(
[0] => _8x10_matte
[1] => _12x12_luster
)
$product变量似乎不可用。如何使它在数组映射中可用?接受a作为第一个参数,因此$product在任何调用中都不可用。您需要让匿名函数知道如何使用$product的全局版本
$result = array_map(function ($x, $y) { global $product; return $product . "_" . $x . '_' . $y; }, $availableSizes, $material);
通过这种方式,解析器知道如何从函数外部查找所需的数据
更好的方法是使用继承来允许函数从其父函数继承变量范围
$result = array_map(function ($x, $y) use ($product) { return $product . "_" . $x . '_' . $y; }, $availableSizes, $material);
我对问题的第二部分有一种狭隘的看法,那就是我错过了第一部分。你只得到了2而不是你正在寻找的4,因为array_map并行地传递数组元素
通常在使用两个或多个数组时,它们的长度应该相等,因为回调函数与相应的元素并行应用
现在,如果两个数组的长度都只有2个元素,那么可以运行第二个数组映射,并以相反的顺序调用数组,也可以在返回中反转$x和$y以保持文本顺序。然后将两个结果合并到一个数组中。但当任一数组的长度超过2个元素时,这种情况就会出现,而且维护起来很麻烦
试试这个。让我们在第一个数组上循环,并在第二个数组上运行数组映射,合并结果。替换整个$result=array_map()代码>此块的行
$result = [];
foreach ($availableSizes as $v) {
$result = array_merge($result, array_map(function ($x) use ($product, $v) {return $product . '_' . $v . '_' . $x;}, $material) );
}
数组映射(函数($x,$y)使用($product){…}
优于数组映射(函数($x,$y){global$product;..}
Dead on!更新了答案以反映情况。@这个问题解决了,但仍然不确定如何映射4个版本,而不是我现在得到的2个版本。对不起,我关注的是最后一部分,我错过了第一部分。我更新了答案以涵盖这一点。@funguy