Php 我有数组,我想循环遍历它们,并给它们分配相同的值,但它们是混合的

Php 我有数组,我想循环遍历它们,并给它们分配相同的值,但它们是混合的,php,arrays,prestashop,Php,Arrays,Prestashop,我想得到所有具有相同id\u属性\u组的数组,并显示它们,但是具有相同id\u属性\u组的数组分散开来。我想通过他们循环多次 array(8) { ["id_attribute"] => string(1) "1" ["id_attribute_group"] => string(1) "1" ["attribute"] => string(1) "S&

我想得到所有具有相同id\u属性\u组的数组,并显示它们,但是具有相同id\u属性\u组的数组分散开来。我想通过他们循环多次

array(8) {
  ["id_attribute"] => string(1)
  "1" ["id_attribute_group"] => string(1)
  "1" ["attribute"] => string(1)
  "S" ["group"] => string(4)
  "Size" ["reference"] => string(6)
  "demo_1" 

}
array(8) {
  ["id_attribute"] => string(2)
  "11" ["id_attribute_group"] => string(1)
  "2" ["attribute"] => string(5)
  "Black" ["group"] => string(5)
  "Color" ["reference"] => string(6)
  "demo_1" 

}
array(8) {
  ["id_attribute"] => string(1)
  "2" ["id_attribute_group"] => string(1)
  "1" ["attribute"] => string(1)
  "M" ["group"] => string(4)
  "Size" ["reference"] => string(6)
  "demo_1" 
}

因此,它应该循环一次,然后使用相同的数字获取全部,然后分配它们,再循环一次,然后使用第二个数字获取全部,依此类推。

如果不了解更多关于您的用例的信息,很难确定。然而,在我看来,一个简单的排序算法(它通过
id\u attribute\u group
有效地对数组进行分组)和一个循环输出就是您所需要的:

$transformArray = [];

foreach($array as $item){
    $transformArray[$item["id_attribute_group"]][] = $item;
}

foreach($transformArray[2] as $color){
    echo "{$color["attribute"]} ";
    foreach($transformArray[1] as $size){
        echo "{$size["attribute"]} ";
    }
    echo PHP_EOL;
}

// Output: Black S M 
代码

// Input array
$array = [
    [
        "id_attribute"       => "1",
        "id_attribute_group" => "1",
        "attribute"          => "S",
        "group"              => "Size",
        "reference"          => "demo_1",
    ],
    [
        "id_attribute"       => "11",
        "id_attribute_group" => "2",
        "attribute"          => "Black",
        "group"              => "Color",
        "reference"          => "demo_1",
    ],
    [
        "id_attribute"       => "2",
        "id_attribute_group" => "1",
        "attribute"          => "M",
        "group"              => "Size",
        "reference"          => "demo_1",
    ],
];

// Sort with reference to id_attribute_group
uasort($array, function($a,$b){
    return $a["id_attribute_group"] <=> $b["id_attribute_group"];
});

// Output data    
foreach($array as $item){
    echo "{$item["group"]} {$item["attribute"]}\n";
}
uasort($array, function($a,$b){
    return $a["id_attribute_group"] <=> $b["id_attribute_group"];
});

$last = false;
foreach($array as $item){
    if($last && $last != $item["id_attribute_group"]){
        echo PHP_EOL;
    }

    echo "{$item["group"]} {$item["attribute"]}\n";
    $last = $item["id_attribute_group"];
}
注释

  • 这里,
    uasort
    根据每个子数组中的值
    id\u属性组
    进行排序
  • 使用
    uasort
    我们维护原始密钥,以便您可以随时使用等
如果您希望对每个组执行不同的操作(例如,将它们分开),则可以将代码更新为以下内容:

附加代码

// Input array
$array = [
    [
        "id_attribute"       => "1",
        "id_attribute_group" => "1",
        "attribute"          => "S",
        "group"              => "Size",
        "reference"          => "demo_1",
    ],
    [
        "id_attribute"       => "11",
        "id_attribute_group" => "2",
        "attribute"          => "Black",
        "group"              => "Color",
        "reference"          => "demo_1",
    ],
    [
        "id_attribute"       => "2",
        "id_attribute_group" => "1",
        "attribute"          => "M",
        "group"              => "Size",
        "reference"          => "demo_1",
    ],
];

// Sort with reference to id_attribute_group
uasort($array, function($a,$b){
    return $a["id_attribute_group"] <=> $b["id_attribute_group"];
});

// Output data    
foreach($array as $item){
    echo "{$item["group"]} {$item["attribute"]}\n";
}
uasort($array, function($a,$b){
    return $a["id_attribute_group"] <=> $b["id_attribute_group"];
});

$last = false;
foreach($array as $item){
    if($last && $last != $item["id_attribute_group"]){
        echo PHP_EOL;
    }

    echo "{$item["group"]} {$item["attribute"]}\n";
    $last = $item["id_attribute_group"];
}

更新的解决方案 可能最简单的方法是先重新格式化阵列,然后循环查看所需的详细信息:

$transformArray = [];

foreach($array as $item){
    $transformArray[$item["id_attribute_group"]][] = $item;
}

foreach($transformArray[2] as $color){
    echo "{$color["attribute"]} ";
    foreach($transformArray[1] as $size){
        echo "{$size["attribute"]} ";
    }
    echo PHP_EOL;
}

// Output: Black S M 

请给我们看一下预期的结果。你试过什么?你到底卡在哪里?我需要它像一种颜色和所有尺寸,然后再像下一种颜色和所有尺寸等等。@DavidSimonovic请参阅更新的代码