如何将 array_intersect() 值与另一个数组中的相应键匹配?
Posted
技术标签:
【中文标题】如何将 array_intersect() 值与另一个数组中的相应键匹配?【英文标题】:How to match array_intersect() values to corresponding key in another array? 【发布时间】:2014-01-17 21:56:35 【问题描述】:假设这是我的 sql 数据库列值:
Result - Reference
1 A1
2 A2
3 A3
4 A4
5 A5
获取上述列后,我有以下数组:
$inputValue = array(1,3,5); //This is the User Input
$result = array(1,2,3,4,5); //This is the mysql fetched result of 'Results' column
$reference = array('A1','A2','A3','A4','A5'); //This is the fetched result of 'Reference' column
$filteredData = array_intersect($inputValue, $result);
print_r($filteredData);
当我执行array_intersect($inputValue, $result);
时,输出如下:
Array ( [0] => 1
[1] => 3
[2] => 5 )
现在在 array_intersect 之后,我将如何将相应的引用存储到另一个数组中?这意味着,在相交之后,$filteredData
具有数组值1,3,5
。现在我还希望将相应的引用存储在一个单独的数组中,该数组应该具有以下值:$MatchingReference = array(A1,A3,A5);
这是怎么做到的?
【问题讨论】:
【参考方案1】:我会试试这个:
$filteredReferences = array();
foreach($filteredData as $key)
$filteredReferences[] = $reference[$key-1];
【讨论】:
我喜欢你的建议。但是当我尝试这样做时,我得到:Notice: Undefined offset: 5 in C:\Users\test.php on line 18 Array ( [0] => A2 [1] => A4 [2] => )
。我的第 18 行是$filteredReferences[] = $reference[$key];
记住数组索引从 0 开始,而不是 1。
只有 1 个错字。您需要在第一行末尾添加分号 (;)。尝试编辑它,但它说编辑需要至少 6 个字符。干杯。
嗨 Xardas,我做了一些测试,但我认为@BillKarwin 方法可能更好。您的代码适用于我给出的示例,其中数组值的顺序为 1、2、3 等。但如果我有 $inputValue
说 '1,58,51' 和 $result
数组值作为'1,2,58,4,51',然后我会得到一个错误,因为它正在寻找$reference[$key-1]
。【参考方案2】:
将数据库中的两个数组组合成一个关联数组。然后使用用户输入仅选择键的子集。
$filteredData = array_intersect_key(
array_combine($result, $reference),
array_flip($inputValue)
);
【讨论】:
你的方法也行。你和 Xardas 的建议都符合我的要求!太棒了:) 经过几次测试,我认为你的方法是最好的方法。我在@Xardas 建议答案下的评论中添加了我的理由。 :) 谢谢比尔。【参考方案3】:如果这是我自己的应用程序中的一项任务,我肯定会implement the data filter with SQL instead of PHP。
否则,您将需要执行一些操作才能享受基于密钥的高效过滤并达到您想要的输出。 (Demo)
var_export(
array_intersect_key(
array_column($resultSet, 'reference', 'result'),
array_flip($inputValue)
)
);
【讨论】:
谢谢@mickmackusa 我将在今年更新我的应用程序中的代码作为升级过程,我将查看上述代码并尝试您的建议。感谢您分享您的建议。以上是关于如何将 array_intersect() 值与另一个数组中的相应键匹配?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据框中的一行的值与另一个数据框中的多行进行比较(包括计算)