gpt4 book ai didi

PHP 按第二个数组排序 array_intersect_key() 结果

转载 作者:可可西里 更新时间:2023-11-01 12:33:36 28 4
gpt4 key购买 nike

我在类中有一个看起来像这样的方法;

class SomeClass {
private $hidden = array(....);

/**
* @return array - numeric indexed array in order of $this->hidden.
* Suitable for use by list(var1, var2, ...)
*/
public function getAsList($list = array())
{
return array_values(array_intersect_key($this->hidden, array_flip($list) );
}

但这没有用,因为该方法的调用者不知道实例变量 $hidden 中关联数组中键/元素对的顺序。理想情况下,返回的数组与 $list 中指定的键的顺序完全相同。例如:

$foo = new SomeClass();
list($foo, $bar, $baz) = $foo->getAsList(array('foo', 'bar', 'baz');

我可以轻松地在循环中编写一些明确、冗长的 PHP 代码来执行此操作,但是是否有一些巧妙的方法来使用各种数组函数,例如array_multisort() 以最少的代码行将其吐出(并希望以编译代码的速度——如果重要的话我会测试它)。

从某种意义上说,这是一个我还不知道答案的脑筋急转弯。我在没有显式循环的情况下这样做并不重要,但我很好奇它是否可以完成。我花了 30 分钟左右,但还没有找到解决方案。

最佳答案

也许 array_replace是你的拼图缺失的部分:

public function getAsList($list = array())
{
$klist = array_flip($list);
return array_values(array_intersect_key(array_replace($klist, $this->hidden), $klist));
}

示例(Demo):

$hidden = [
'apples' => 19,
'eggs' => 7,
'grapes' => 144,
'mushrooms' => 3,
'oranges' => 16
];

$list = ['grapes', 'apples', 'eggs', 'oranges'];

$klist = array_flip($list);
print_r(array_values(array_intersect_key(array_replace($klist, $hidden), $klist)));

/*
Array
(
[0] => 144
[1] => 19
[2] => 7
[3] => 16
)
*/

关于PHP 按第二个数组排序 array_intersect_key() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com