当前位置: 首页 > 知识库问答 >
问题:

遍历嵌套数组php的最佳实践

蓝夕
2023-03-14

我正在用PHP写作。

我想做的是像Magento2中的可配置产品或Woocommerce中的可变产品。我要求用户输入产品的属性,如颜色、大小等”。

将每个属性视为一个属性类别,其中包含属性,例如“颜色”将具有“红色”、“绿色”、“蓝色”等属性。大小将具有“大”、“小”、“中”等属性。

现在,我需要做一个循环,它接受所有大小、颜色和其他选定的属性,并返回所有可能的配置。同时,要循环的属性数量没有预定义,因为用户可以添加或删除属性。

例如,如果我有:

Color - - - - - - - - Size - - - - - - - - Shape
Red - - - - - - - - - Large - - - - - - -  Square
Green - - - - - - - - Medium - - - - - - - Rounded
Blue - - - - - - - -  Small - - - - - - - - 

因此,我必须拥有每种颜色、每种尺寸和形状:

Red - Large - Square
Red - Large - Rounded
Red - Medium - Square
Red - Medium - Rounded
Red - Small - Square
Red - Small - Rounded

其他属性也是如此。

实现它的最佳实践是什么?

共有1个答案

伍嘉
2023-03-14

为此,您需要递归

function getCombinations($attributes){
    $combinations = [];
    buildCombinationChain($attributes,0,[],$combinations);

    // encode combinations to desired string format
    $result = [];
    foreach ($combinations as $combination) {
        $result[] = implode(' - ', $combination);
    }

    return $result;
}

function buildCombinationChain($attributes,$index,$chain,&$output){
    if($index>=count($attributes)){
        // we have reached the last attribute, stop recursion and push the current chain to the output array
        $output[] = $chain;
        return;
    }
    foreach ($attributes[$index] as $attribute) {
        $new_chain = $chain; // create a copy of the current chain
        $new_chain[] = $attribute; // and add the current attribute to it
        buildCombinationChain($attributes,$index+1,$new_chain,$output); // continue recursively on the next attribute group
    }
}



$attributes = [
    ['Red', 'Green', 'Blue'],
    ['Large', 'Medium', 'Small'],
    ['Square', 'Rounded']
];

echo json_encode(getCombinations($attributes));
 类似资料:
  • 问题内容: 我必须遍历json数组对象。 它具有以下结构。 基本上我在做的是prod_1是产品的名称,并且prod_1的版本列表已填充在其中。 所以现在我想要的是产品的名称以及它的版本。 问题在于可能有很多产品和该产品下的许多版本。所以我需要可以在 javascript 中使用适当的循环结构来对其进行处理。 最好将循环将产品名称存储在一个变量中,将版本存储在另一个变量中,因为我需要对产品名称进行一

  • 问题内容: 我有这个数组…如何打印每个文件路径和文件名?做这个的最好方式是什么? 问题答案: 使用无键循环 使用键循环 使用循环 是获取数组或对象快照的非常有用的功能。

  • 问题内容: 我有一个json数组: 如何使用php遍历此数组? 问题答案: 如果需要关联数组,请将第二个函数参数设置为true 如果您需要关联数组,则某些版本的php需要true的第二个参数

  • 问题内容: 我试图遍历嵌套对象以检索由字符串标识的特定对象。在下面的示例对象中,标识符字符串是“ label”属性。我无法解决如何遍历树以返回适当对象的问题。任何帮助或建议,将不胜感激。 问题答案: 您可以创建像这样的递归函数来对对象进行深度优先遍历。 可以这样称呼

  • 问题内容: 我需要遍历一些大型数组,并将它们存储在API调用的主干集合中。在不导致循环导致接口无响应的情况下执行此操作的最佳方法是什么? 由于返回的数据太大,ajax请求的返回也将阻塞。我认为我可以将其拆分并使用setTimeout使其在较小的块中异步运行,但是有一种更简单的方法来执行此操作。 我认为网络工作者会很好,但需要更改一些保存在UI线程上的数据结构。我已经尝试过使用它来执行ajax调用,

  • 问题内容: 我目前有这个: test.json看起来像这样: 我越来越: 如何更改它,以便无论我拥有多少嵌套值,它都将循环遍历所有嵌套项目? 所以对于上面的例子,我会得到 问题答案: 您可以创建一个递归循环函数,但是会遇到一个问题:当属性是对象时,因为没有字符串,所以没有文本可显示。因此,您将得到: 因为while 是为项目#2显示的字符串,所以它是为项目#1显示的对象。 无论如何,这就是我组成的