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抱歉!我的错误没有仔细看清楚。您的编码也可以工作。再次感谢您的帮助