我有一个数组$items
,其中包含很多信息:
名称,大小,数量,颜色,ID ...
我正在使用'for'循环按颜色对$items
值进行排序,并将排序后的值保存在新数组中,但是我在生成的数组中得到的值是false或者没有正确排序。
在排序$items
的方式中,我首先从$ items
<?php
$total = $item_number; // total count of $items iterations
$color_list_final = array_values(array_unique($color_list)); // color list without occurrences
$name_list_final = array_values(array_unique($name_list)); // name list without occurrences
?>
然后将它们用作与$item
<?php
echo 'TEST - 1 - SORT BY COLORS<br/>';
$sorted_items = array(); // the new array to fill
$count_sorting = array(); // will count the total of all iterations
// SORT BY COLORS
$countfrom0 = -1;
for ($i = 0; $i < $color_list_count; $i++)
{
$countfrom0++;
$current_color = $color_list_final[$countfrom0];
echo 'couleur :'.$i.' '.$current_color.'<br/>';
//SAVING THE CURRENT COLOR GROUP VALUE IN THE NEW ARRAY
$sorted_items[$i]['color'] = $current_color;
$i3 = 0;
for ($i2 = 0; $i2 <= $total; $i2++)
{
//IF ITEM HAVE THE SAME COLOR THAN THE CURRENT COLOR
if($item[$i2]['color'] == $color_list_final[$countfrom0])
{
echo trim($item[$i2]['name']).' - '.$item[$i2]['size'].' - '.$item[$i2]['color'].'<br/>';
//SAVING THE ITEMS VALUES IN THE NEW ARRAY
$line[$i3] = trim($item[$i2]['name']).' - '.$item[$i2]['size'].' - '.$item[$i2]['color'].'<br/>';
$sorted_items[$i]['items'] = $line;
$count_sorting[$i3] = $i3;
$i3++;
}
}
echo '---------------------------<br/>';
}
echo '<br/>';
?>
所以echo显示了我想要的结构
COULEUR :0 #A0C343
FREE BEES - XL - #A0C343
FREE BEES - M - #A0C343
COLOMBUS - XS - #A0C343
FREE BEES - XXXL - #A0C343
---------------------------
COULEUR :1 #FFE673
FREE BEES - M - #FFE673
---------------------------
COULEUR :2 #F7D8D3
COLOMBUS - XS - #F7D8D3
COLOMBUS - S - #F7D8D3
---------------------------
现在,当我在$sorted_items
上执行print_r时,我按颜色(3)得到正确数量的数组,但嵌套数组$line
似乎保持了他的大小和值第一段,然后,对于其他段落,它用具有相同索引的新值替换旧值...但是具有比新值更大索引的旧值将保持与第一段。
ARRAY
(
[0] => ARRAY
(
[COLOR] => #A0C343
[ITEMS] => ARRAY
(
[0] => FREE BEES - XL - #A0C343
[1] => FREE BEES - M - #A0C343
[2] => COLOMBUS - XS - #A0C343
[3] => FREE BEES - XXXL - #A0C343
)
)
[1] => ARRAY
(
[COLOR] => #FFE673
[ITEMS] => ARRAY
(
[0] => FREE BEES - M - #FFE673
[1] => FREE BEES - M - #A0C343
[2] => COLOMBUS - XS - #A0C343
[3] => FREE BEES - XXXL - #A0C343
)
)
[2] => ARRAY
(
[COLOR] => #F7D8D3
[ITEMS] => ARRAY
(
[0] => COLOMBUS - XS - #F7D8D3
[1] => COLOMBUS - S - #F7D8D3
[2] => COLOMBUS - XS - #A0C343
[3] => FREE BEES - XXXL - #A0C343
)
)
)
任何想法?
答案 0 :(得分:1)
如果按照正确的顺序echo
,则尝试使用echo
点处的数据填充数组。这是一个很长的线程来调试而不使用代码本身,但也许你可以尝试转向
echo trim($item[$i2]['name']).' - '.$item[$i2]['size'].' - '.$item[$i2]['color'].'<br/>';
到
$array[$i2] = array( 'name' => trim($item[$i2]['name'])
, 'item' => $item[$i2]['size']
, 'color' => $item[$i2]['color']
);
另外,$i3
的角色似乎有点模棱两可,所以可能要么在for()
循环中声明它,要么完全摆脱它。
答案 1 :(得分:0)
在嵌套的'for'循环
之后,我清空了数组'$ line'$i3 = 0;
for ($i2 = 0; $i2 <= $total; $i2++)
{
//SI LA COULEUR DE L ITEM EST LA MM QUE CELLE PRECEDEMENT DEFINI
if($item[$i2]['color'] == $color_list_final[$countfrom0])
{
echo trim($item[$i2]['name']).' - '.$item[$i2]['size'].' - '.$item[$i2]['color'].'<br/>';
$line[$i3] = trim($item[$i2]['name']).' - '.$item[$i2]['size'].' - '.$item[$i2]['color'];
$sorted_items[$i]['items'] = $line;
$count_sorting[$i3] = $i3;
$i3++;
}
}
$line = array();
它给了我我想要的东西
ARRAY
(
[0] => ARRAY
(
[COLOR] => #A0C343
[ITEMS] => ARRAY
(
[0] => FREE BEES - XL - #A0C343
[1] => FREE BEES - M - #A0C343
[2] => COLOMBUS - XS - #A0C343
[3] => FREE BEES - XXXL - #A0C343
)
)
[1] => ARRAY
(
[COLOR] => #FFE673
[ITEMS] => ARRAY
(
[0] => FREE BEES - M - #FFE673
)
)
[2] => ARRAY
(
[COLOR] => #F7D8D3
[ITEMS] => ARRAY
(
[0] => COLOMBUS - XS - #F7D8D3
[1] => COLOMBUS - S - #F7D8D3
)
)
)