基于其他数组的多维排序


sort based on other array multi dimentional

我有id,颜色和电缆尺寸的产品。我想尊重电缆尺寸数组与产品id的顺序这样的:

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

所以这个电缆数组就像我们的排序映射在这个例子中我们的任何产品都应该有10英寸的第一和10英尺的第二,它们都带有产品id。

然后是colors

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

但这是错误的,不知道我如何才能实现它

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

正如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;
}