Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php连接数组中的字符串_Php_Arrays - Fatal编程技术网

用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