Php 我有数组,我想循环遍历它们,并给它们分配相同的值,但它们是混合的
我想得到所有具有相同id\u属性\u组的数组,并显示它们,但是具有相同id\u属性\u组的数组分散开来。我想通过他们循环多次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&
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请参阅更新的代码