我想做这样的事情:
$product = $productdata['productinfo']['product']; //canvas
$availableSizes = $productdata["productinfo"]["sizes"]; // 8x10 and 10x10
$material = array("matte","luster");
我想合并所有值的组合,以便结果是平面数组中的 4 个字符串值:
Array
(
[0] => canvas_8x10_matte
[1] => canvas_8x10_luster
[2] => canvas_10x10_matte
[3] => canvas_10x10_luster
)
我试过这样的:
$result = array_map(
function ($x, $y) {
return $product . "_" . $x . '_' . $y;
},
$availableSizes,
$material
);
但它只给我带来了两个值(value):
Array
(
[0] => _8x10_matte
[1] => _12x12_luster
)
$product
变量似乎不可用。如何使其在 array_map()
范围内可用?
最佳答案
array_map()接受 callable作为第一个参数,因此由于 variable scope 而调用的任何内容中 $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 并行传递数组元素。
Usually when using two or more arrays, they should be of equal length because the callback function is applied in parallel to the corresponding elements.
现在,如果两个数组的长度都只有 2 个元素,您可以运行第二个 array_map 并以相反的顺序调用数组,同时在返回中反转 $x 和 $y 以保持文本顺序。然后将两个结果合并到一个数组中。但是,一旦任一数组超过 2 个元素,它就会中断,而且维护起来很麻烦。
试试这个。让我们遍历您的第一个数组,然后仅在第二个数组上运行 array_map,合并结果。用这个 block 替换整个 $result = array_map();
行。
$result = [];
foreach ($availableSizes as $v) {
$result = array_merge($result, array_map(function ($x) use ($product, $v) {return $product . '_' . $v . '_' . $x;}, $material) );
}
关于php - 使用来自 3 个平面数组的所有值组合形成分隔字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42470776/