2011-10-04 140 views
1

我有轮胎尺寸以下的数组:遍历阵列并删除重复

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

回答

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>"; 
} 
+0

完美,谢谢!如果你不介意,我只是更新了我的答案,你可以看到订单上发生了什么? – Drew

+0

为了使订单正确,请将该行更改为'foreach(sort($ sizes,SORT_NUMERIC)as $ size => $ tmp){' – Luke

+0

添加了对代码的排序。附:你必须在我的情况下使用kso​​rt,因为大小是关键。 – jancha

1

使用临时数组存储已经echo版则数字。

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>"; 

} 
+0

我最喜欢这个解决方案,因为没有第二个循环。 – Sonny

+0

取决于OP想要如何处理脚本的其他部分,尽管他没有在他的帖子中指定它,但有两个循环可能是合理的。如果他以后再想使用查询结果,情况尤其如此。 –

1

创建一个新的阵列只有第一个值

$diameter = array(); 
foreach ($tires as $tire) { 
    $diameter[] = $tire[0]; 
} 

然后,使用array_unique()来删除重复的,或者只将它们添加到$直径如果他们不是已经在那里。

然后使用该$直径数组创建下拉菜单。

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

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)