1

我的目标是将一组新的产品记录附加到现有的关联数组中,但要确保每个产品只表示一次。我写了下面的函数。对于这么简单的事情,看起来代码太多了。是否有我需要了解的 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; }
    }
}
4

2 回答 2

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)像往常一样说。

于 2012-04-16T01:19:06.197 回答
1

如何将产品 ID 分配为数组键$already

while( $result = mysql_fetch_array( $addition ) ) {
  $already[$result['products_id']] = $result;
}

这当然会覆盖旧的产品记录,但它应该优雅地避免重复!

于 2012-04-16T01:19:39.117 回答