循环遍历数组并删除重复项

时间:2011-10-04 14:28:43

标签: php mysql arrays loops

我有以下轮胎尺寸数组:

    Array
    (
        [0] => 155
        [1] => 70
        [2] => 13
    )

    Array
    (
        [0] => 155
        [1] => 80
        [2] => 13
    )

    Array
    (
        [0] => 165
        [1] => 65
        [2] => 14
    )

    Array
    (
        [0] => 175
        [1] => 65
        [2] => 14
    )

    Array
    (
        [0] => 175
        [1] => 70
        [2] => 13
    )

    Array
    (
        [0] => 175
        [1] => 70
        [2] => 14
    )

等等。现在我正在创建一个下拉菜单,以便人们可以选择他们正在搜索的轮胎尺寸。所以这是我的PHP代码:

include 'database.php';
$result = $mysqli->query('SELECT DISTINCT SKU_SIZE FROM SKU_DATA WHERE SKU_BRANDNAME = "'.$brand.'" ORDER  BY SKU_SIZE');

while( $row = $result->fetch_assoc()){
    $sku_size = $row['SKU_SIZE'];
    $chars = preg_split('/[^\d]/', $sku_size, -1, PREG_SPLIT_NO_EMPTY);

    echo "<option>".$chars[0]."</option>";

}

现在代码只是显示每个数组中的第一个数字,对于他们选择的第一个下拉列表。

现在它显示155,155,165,175,175 - 我想要它只是显示唯一值,所以它只显示155,165,175。

更新:谢谢!我得到了那部分工作。一个简单的问题..订单不太正确,不确定我做错了什么。这是预览:

enter image description here

5 个答案:

答案 0 :(得分:2)

创建一个数组并在输出之前检查每个值是否在数组中。如果它不在数组中,请在输出之前将其添加。

include 'database.php';
$result = $mysqli->query(
    'SELECT DISTINCT SKU_SIZE 
    FROM SKU_DATA WHERE SKU_BRANDNAME = "'.$brand.'" 
    ORDER  BY SKU_SIZE'
);

$seen = array();

while( $row = $result->fetch_assoc()){
    $sku_size = $row['SKU_SIZE'];
    $chars = preg_split('/[^\d]/', $sku_size, -1, PREG_SPLIT_NO_EMPTY);

    if(in_array($chars[0], $seen))
        continue;

    $seen[] = $chars[0];
    echo "<option>".$chars[0]."</option>";

}

答案 1 :(得分:2)

您可以使用array_unique()函数从数组中删除任何重复的唯一项。

EG:

$arrays = array(1,2,3) + array(1,2,3);

print_r(array_unique($arrays));

// Will print just: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )

答案 2 :(得分:1)

使用它:

while( $row = $result->fetch_assoc()){
    $sku_size = $row['SKU_SIZE'];
    $chars = preg_split('/[^\d]/', $sku_size, -1, PREG_SPLIT_NO_EMPTY);

    $sizes[$chars[0]] = true;
}

ksort($sizes, SORT_NUMERIC);

foreach ($sizes as $size => $tmp){
    echo "<option value=\"$size\">$size</option>";
}

答案 3 :(得分:1)

使用临时数组存储echo编辑的数字。

答案 4 :(得分:1)

使用第一个值

创建一个新数组
$diameter = array();
foreach ($tires as $tire) {
    $diameter[] = $tire[0];
}

然后,使用array_unique()删除重复项,或者只将它们添加到$ diameter(如果它们尚未存在)。

然后使用$ diameter数组创建下拉列表。

这样做的好处是你还可以对$ diameter数组进行排序。