PHP 数组 - 'set where key=?'类型函数?
Posted
技术标签:
【中文标题】PHP 数组 - \'set where key=?\'类型函数?【英文标题】:PHP arrays - a 'set where key=?' type function?PHP 数组 - 'set where key=?'类型函数? 【发布时间】:2011-11-28 14:10:53 【问题描述】:是否有内置的 php 函数允许我根据匹配的键设置数组的值?也许我最近写了太多 SQL,但我希望我可以执行以下逻辑而不写出嵌套的 foreach 数组,如下所示:
foreach($array1 AS $k1 => $a1)
foreach($array2 AS $a2)
if($a1['id'] == $a2['id'])
$array[$k1]['new_key'] = $a2['value'];
有没有更好的方法来做到这一点?在 SQL 逻辑中,它将是“SET array1.new_key = x WHERE array1.id = array2.id”。再说一次,我最近写的 SQL 太多了:S
【问题讨论】:
对于它的价值,我认为这不会更新原始数组。你不需要把第一个循环改成&$a1
吗?
@Jonathan Coe,你想要做的实际上并不是那么微不足道,所以我怀疑有任何内置的方法可以做到这一点。
@sdleihssirhc 你是对的,对不起,我写错了代码......在我的实际代码中,我正在更新原始数组,而不是别名,我的错误。
【参考方案1】:
当我需要这样做时,我使用一个函数首先通过 id 映射一个数组的值:
function convertArrayToMap(&$list, $attribute='id')
$result = array();
foreach ($list as &$item)
if (is_array($item) && array_key_exists($attribute, $item))
$result[$item[$attribute]] = &$item;
return $result;
$map = convertArrayToMap($array1);
然后遍历另一个数组并赋值:
foreach ($array2 AS $a2)
$id = $a2['id'];
$map[$id]['new_key'] = $a2['value'];
即使一次通过,整体循环也更少,并且方便将来进一步操作。
【讨论】:
啊……我喜欢这样。当然不是更少的代码,而是更多更高效的过程绝对值得额外的。 是的,另外,如果你把上面的函数放到一个库中(就像我一样),那么每次使用它是更少的代码。 是的,对我来说这是一个类方法,只是想简化它。嵌套的 foreach 循环通常不是完成这类事情的最佳方式。【参考方案2】:这个没问题
foreach(&$array1 AS &$a1)
foreach($array2 AS $a2)
if($a1['id'] == $a2['id'])
$a1['new_key'] = $a2['value'];
【讨论】:
不应该是foreach($array1 AS &$a1)
和foreach($array2 AS $a2)
吗?
@Rocket:我觉得应该是&$array1 as &$a1
,但说实话,我现在还不确定
很确定你不需要&$array1
。
无论哪种方式都可以 ;) 我可能在这里满地都是noobing,但是为什么首先使用 & 呢?没有它也可以工作,这是最佳实践吗?
@JonathanCoe:我怀疑它是否有效。 & before $array 确保当你改变 $a1 时,$array1 也会改变以上是关于PHP 数组 - 'set where key=?'类型函数?的主要内容,如果未能解决你的问题,请参考以下文章