php - 使用来自 3 个平面数组的所有值组合形成分隔字符串数组

标签 php arrays combinations string-concatenation

我想做这样的事情:

$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/

相关文章:

c# - 值列表的所有可能组合

r - expand.grid 的动态参数

php - PDF 缩略图总是使用 Imagick 生成为灰度

php - 安装 Composer 失败,出现 "The openssl extension is missing"错误

c - 对命令行参数进行排序

php - 使用另一个表组合三个表输出以进行交叉引用

php - 如何更改数据库连接的默认字符集?

php - 使用 PHP 对象设置递归属性是否安全?

java - 创建一个日志程序来记录输入

javascript - 如何从对象数组中的嵌套数组中获取数组值的组合