PHP使一些键在关联数组中具有粘性

PHP使一些键在关联数组中具有粘性,php,Php,我尝试使用array\u column和array\u multisort按键(ID)对数组B进行排序 然而,我有一个场景,我需要一些ID才能粘在顶部 例如,通过比较数组A和数组B,将ID 3和ID 1移动到数组B的顶部。最终结果将是数组C 是否有PHP数组函数来实现这一点?请建议 阵列A Array ( [0] => Array ( [ID] => 3 ) [1] => Array (

我尝试使用
array\u column
array\u multisort
按键(ID)对数组B进行排序

然而,我有一个场景,我需要一些ID才能粘在顶部

例如,通过比较数组A和数组B,将ID 3和ID 1移动到数组B的顶部。最终结果将是数组C

是否有PHP数组函数来实现这一点?请建议

阵列A

Array
(
    [0] => Array
        (
            [ID] => 3
        )

    [1] => Array
        (
            [ID] => 1
        )
)
1
Array
(
    [0] => Array
        (
            [ID] => 1
            [product] => A
        )

    [1] => Array
        (
            [ID] => 2
            [product] => B
        )

    [2] => Array
        (
            [ID] => 3
            [product] => C
        )

    [3] => Array
        (
            [ID] => 4
            [product] => D
        )
)
1
Array
(
    [0] => Array
        (
            [ID] => 3
            [product] => C
        )

    [1] => Array
        (
            [ID] => 1
            [product] => A
        )

    [2] => Array
        (
            [ID] => 2
            [product] => B
        )

    [3] => Array
        (
            [ID] => 4
            [product] => D
        )
)
1
阵列B

Array
(
    [0] => Array
        (
            [ID] => 3
        )

    [1] => Array
        (
            [ID] => 1
        )
)
1
Array
(
    [0] => Array
        (
            [ID] => 1
            [product] => A
        )

    [1] => Array
        (
            [ID] => 2
            [product] => B
        )

    [2] => Array
        (
            [ID] => 3
            [product] => C
        )

    [3] => Array
        (
            [ID] => 4
            [product] => D
        )
)
1
Array
(
    [0] => Array
        (
            [ID] => 3
            [product] => C
        )

    [1] => Array
        (
            [ID] => 1
            [product] => A
        )

    [2] => Array
        (
            [ID] => 2
            [product] => B
        )

    [3] => Array
        (
            [ID] => 4
            [product] => D
        )
)
1
数组C(结果)

Array
(
    [0] => Array
        (
            [ID] => 3
        )

    [1] => Array
        (
            [ID] => 1
        )
)
1
Array
(
    [0] => Array
        (
            [ID] => 1
            [product] => A
        )

    [1] => Array
        (
            [ID] => 2
            [product] => B
        )

    [2] => Array
        (
            [ID] => 3
            [product] => C
        )

    [3] => Array
        (
            [ID] => 4
            [product] => D
        )
)
1
Array
(
    [0] => Array
        (
            [ID] => 3
            [product] => C
        )

    [1] => Array
        (
            [ID] => 1
            [product] => A
        )

    [2] => Array
        (
            [ID] => 2
            [product] => B
        )

    [3] => Array
        (
            [ID] => 4
            [product] => D
        )
)
1

下面是一个例子:

<?php
$a = [['ID' => 5], ['ID' => 1]];
$b = [['ID' => 1, 'product' => 'A'], ['ID' => 2, 'product' => 'B'], ['ID' => 3, 'product' => 'C'], ['ID' => 4, 'product' => 'D'], ['ID' => 5, 'product' => 'E']];

// $keysOnTop = Array([0] => 5, [1] => 1)
$keysOnTop = array_column($a, 'ID');

$temp1 = $temp2 = [];
foreach($b as $value){
    if(in_array($value['ID'], $keysOnTop)){
        $temp1[] = $value;
    } else {
        $temp2[] = $value;
    }
}
// $temp1 = Array([0] => Array([ID] => 1, [product] => A), [1] => Array([ID] => 5, [product] => E))
// $temp2 = Array([0] => Array([ID] => 2, [product] => B), [1] => Array([ID] => 3, [product] => C), [2] => Array([ID] => 4, [product] => D))

$final_arr = array_merge($temp1, $temp2);

echo '<pre>';
print_r($final_arr);

// Output:
/*
Array
(
    [0] => Array
        (
            [ID] => 1
            [product] => A
        )

    [1] => Array
        (
            [ID] => 5
            [product] => E
        )

    [2] => Array
        (
            [ID] => 2
            [product] => B
        )

    [3] => Array
        (
            [ID] => 3
            [product] => C
        )

    [4] => Array
        (
            [ID] => 4
            [product] => D
        )

)
*/

?>

如果对您的项目范围有更深入的了解,生成查找值和异常值所涉及的准备步骤可能是可以避免的,但我将只使用您提供的值。(我的意思是,为了简洁起见,您可以将异常值硬编码为
999999
并将
array\u flip
环绕
array\u column

max值只需高于优先级数组中的最高ID即可

查找需要将ID值作为键,将其原始索引作为新值(因此翻转)

usort()
正是执行自定义排序过程时要使用的php函数

use
用于将所需的附加值传递到自定义函数的作用域中

spaceship操作符(
)是打包双条件排序逻辑的一种非常好的方法。将使用“从左到右”的值对每一侧进行比较

代码:()

如果没有spaceship操作符,自定义函数会明显变得更加冗长

代码:()


你的意思是数组A的所有键都应该在最终结果的顶部吗?@d.coder是的,更正了数组B中的ID是唯一的吗?@KarolGasienica是的,它是唯一的我在这一个中使用了几个“技巧”。如果你想让我澄清一个特定的方面,请提问。你不应该使用sub-7版本。spaceship操作符在PHP5中不可用。我需要编写一个更长的自定义函数。我会在可能的时候编辑。您使用的php版本是什么?@gosulove我想我有旧的skool版本为您服务。如果有不太正确的地方,请提供打破我的代码的输入,我会调整。我希望输出中5比1早。查看OP的数组A与数组C的关系?我认为你的流程需要改进。所有答案应包括解释。@d.coder感谢您的努力。。。然而,输出并不是我期望的结果。。。请check@gosulove请不要投票错误的答案,这只会让研究人员感到困惑。我只更改了输入数组,只是为了检查输出的有效性。如果您使用问题中指定的输入数组,那么它将产生相同的预期输出。有什么不同?@d.coder抱歉!我的错误没有仔细看清楚。您的编码也可以工作。再次感谢您的帮助