0

$items名前、サイズ、数量、色、ID などの多くの情報を含む配列があります。「for」ループを使用して$items値を色で並べ替え、並べ替えた値を新しい配列に保存していますが、値は生成された配列が false または正しく順序付けされていません。

並べ替えの途中で$items、まず $items から 3 つの配列を作成しました

    <?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/>';
?>

エコーは私が欲しかった構造を表示しています

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

今、print_r on を実行しているとき、$sorted_items色ごとに正しい数の配列を取得します (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
            )

    )

)

何か案は?

4

2 に答える 2

1

if it is echoing in the right order then try to populate an array with the data at the point where you echo it. this is quite a long thread to debug without using the code itself, but perhaps you could try to turn

echo trim($item[$i2]['name']).' - '.$item[$i2]['size'].' - '.$item[$i2]['color'].'<br/>';

into

$array[$i2] = array(  'name'  => trim($item[$i2]['name'])
                   ,  'item'   => $item[$i2]['size']
                   ,  'color' => $item[$i2]['color']
                   );

also, $i3's role seems a little ambiguous so maybe either declare it in a for() loop or get rid of it altogether.

于 2013-07-11T11:06:30.500 に答える