我需要在下拉列表中显示从mysql表的重复值。我不能这样做,因为数组不能有重复的键。但是我发现了一个可以接受重复密钥的函数。
我需要有人的帮助谁可以指导我把下拉列表值到这个函数:
dropdownlist:
$dc=mysql_query("SELECT * FROM ECR_CBDC WHERE Prod_desc='$product' AND Ac_code='$custcode' AND Ecr_No=0 AND usr='$user' AND Cylno!='' ORDER BY Cylno ASC");
$num_rows = mysql_num_rows($dc);
$fill_from_array = array(); /* as "value"=>"option" */
for($i = 1; $i <= $num_rows; $i++)
{
$row = mysql_fetch_array($dc);
$fill_from_array[$row['Cylno']] = $row['Cylno'];
}
有重复键的函数:
<?php
function array_combine_($keys, $values)
{
$result = array();
foreach ($keys as $i => $k) {
$result[$k][] = $values[$i];
}
array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));
return $result;
}
print_r(array_combine_(Array('2','2','3'), Array(2,2,3)));
?>
表ECR_CBDC列cyno有以下值:1020.20.30.405050
当我把上面的值放入数组fill_from_array时,值将是这样的:
10 => 10
20 => 20
30 => 30
40 => 40
50 => 50
我需要的数组是:
10 => 10
20 => 20
20 => 20
30 => 30
40 => 40
50 => 50
50 => 50
我建议使用其他方法
function array_combine($array, $key, $value)
{
$array[] = array('key' => $key, 'value' => $value);
return $array;
}
或
function array_combine(Array $keys, Array $values)
{
$array = [];
foreach($keys as $i => $key)
{
$array[] = array('key' => $key, 'value' => $values[$i]);
}
return $array;
}
数组的末尾可以是
0 => [key] 2 | [value] 2
1 => [key] 2 | [value] 2
2 => [key] 3 | [value] 3
当你在SQl上执行select操作时它会返回一个数组,如
[0] => [[field_1] => 10, [field_2] => 20],
[1] => [[field_1] => 10, [field_2] => 20],
[2] => [[field_1] => 10, [field_2] => 20],
那么你可以使用foreach
方法1,使用array_combine
的第一个方法$array = array(); // or [] for php 5.4+
foreach ( $results as $result)
{
$array = array_combine($array, $result['field_1'], $result['field_2']);
}
使用以下函数
创建下拉列表function makeDropDown($array)
{
$options = '';
foreach($array as $value)
{
$options .= '<option value="' . $value['key'] . '">' . $value['value'] . '</option>';
}
return $options;
}
你应该像
那样使用<select><?php echo makeDropDown($array); ?></select>
只需使用SQL查询来获取重复的记录。
SELECT * FROM ECR_CBDC WHERE Prod_desc='$product' AND Ac_code='$custcode' AND Ecr_No=0 AND usr='$user' AND Cylno!='' Having count(Cylno) > 1 ORDER BY Cylno ASC