сортировка на основе другого массива многомерного

1

У меня есть продукты, которые имеют идентификатор, цвет и размер кабеля. Я хочу уважать порядок массива размера кабеля с идентификаторами продуктов следующим образом:

cable Array
(
    [5619] => 10 - Inch
    [5552] => 10 - Foot
    [8211] => 10 - Inch
    [5733] => 10 - Foot
)

поэтому этот массив кабелей подобен нашей карте сортировки, какой бы продукт, который у нас был в этом примере, должен иметь 10-дюймовый первый и 10-футовый следующий, и они поставляются с идентификаторами продуктов.

тогда у меня есть цвета

product Array
(

    [Green] => Array
        (
            [5552] => 10 - Foot
            [5619] => 10 - Inch
        )

    [Pink] => Array
        (
            [5733] => 10 - Foot
            [8211] => 10 - Inch
        )

    [Black] => Array
        (
            [4564] => 10 - Foot
        )

)

в этом примере, когда у нас есть более одного размера для цвета, он должен быть заказан на основе массива кабелей розового и зеленого цвета:

[Pink] => Array
        (
            [8211] => 10 - Inch
            [5733] => 10 - Foot

        )
because 8211 came before 5733 in cable array.
[Green] => Array
            (
             [5619] => 10 - Inch   
             [5552] => 10 - Foot
            )
 as well because 5619 came before 5552 in cable array.

Я сделал это:

function OrderSizeAndColorByMerging($cablesizes, $productarray) {
    foreach ($cablesizes as $id => $size):
        foreach ($productarray as $color => $sizes):
            if ($sizes[$id]):
                $productarray[$color] = $cablesizes;
            endif;
        endforeach;
    endforeach;
    return $productarray;
}

но это неправильно, не знаю, как я могу это достичь.

  • 0
    честно говоря, я не могу понять, как вы хотите, чтобы сортировка выполнялась, если бы вы могли объяснить свой вопрос еще раз, это было бы хорошо.
  • 0
    @QuakeCore У меня есть размер кабеля 10 дюймов, 10 футов, и у меня есть множество продуктов, но 10 и 10 футов не в правильном порядке. Я хочу, чтобы сначала были 10 дюймов, а затем 10 футов, как вы видите, они есть. не заказал сейчас, поэтому мне нужно как-то их заказать, и кабельный массив поможет, потому что он их заказал.
Показать ещё 1 комментарий
Теги:
arrays
sorting

2 ответа

1
   foreach( $cable as $key => $value ){
      foreach ($product as $keyarray){

    if (array_key_exists( $key , $keyarray ))
    {
    echo array_key_exists( $key , $keyarray );
    unset($keyarray[$key]);
    array_unshift($arr ,$key=>value);// not sure if this is ever going to work, but i am giving u a general idea (never tested it)
    break;
    }
    }
    }
    print_r($array2);
  • 0
    Вы имеете в виду $ keyarray под $ arr? а где $ массив2 ?! а под значением вы подразумеваете $ value ?!
  • 0
    эй, твой код помог мне решить мою проблему, но твой код имеет недостатки, поэтому я опубликую ответ здесь. также +1 для вас.
Показать ещё 2 комментария
0

как сказал QuakeCore в своем коде, мне пришлось отключить массив внутри цветов, а затем снова назначить их. поэтому теперь мой код работает, надеюсь, что он может помочь некоторым сверстникам в будущем:

function OrderSizeAndColorByMerging($cablesizes, $productarray) {

    foreach ($cablesizes as $id => $size):
        foreach ($productarray as $color=>$array):
    if (array_key_exists($id, $array)) {
         unset($productarray[$color][$id]);
         $productarray[$color][$id]=$size;
            }
        endforeach;
    endforeach;

    return $productarray;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню