我的目标是将一组新的产品记录附加到现有的关联数组中,但确保每个产品仅表示一次。我写了下面的函数。对于这么简单的事情,它看起来像太多的代码。我需要了解一下PHP数组函数吗?
function _append ( &$already, $addition ) {
while( $result = mysql_fetch_array( $addition ) ) {
$already_found = FALSE;
foreach ( $already as $try ) {
if ( $try["products_id"] == $result["products_id"] ) {
$already_found = TRUE;
break;
}
}
if ( !$already_found ) { $already[] = $result; }
}
}
答案 0 :(得分:2)
使用产品ID作为密钥,例如$already[$result['products_id']] = $result;
,然后您可以使用array_key_exists
轻松检查所有现有产品的产品ID。 (或者,不要。无论哪种方式,每个ID只有一个产品;如果不检查,最新的副本将覆盖之前的副本。)
无论哪种方式,你都完全摆脱了foreach
。
function _append(&$already, $addition) {
while ($result = mysql_fetch_array($addition)) {
if (!array_key_exists($result['products_id'], $already)) {
$already[$result['products_id']] = $result;
}
}
}
问题是,您的数组不再是数字索引。无论您向其中添加项目,都可以使用其键(products_id的值)添加它们。但你可以像往常一样说foreach ($items as $item)
。
答案 1 :(得分:1)
如何在$already
?
while( $result = mysql_fetch_array( $addition ) ) {
$already[$result['products_id']] = $result;
}
这当然会覆盖旧产品记录,但它应该优雅地避免重复!