Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在HTML下拉列表中设置文本格式_Php_Html_Format_Dropdown - Fatal编程技术网

Php 如何在HTML下拉列表中设置文本格式

Php 如何在HTML下拉列表中设置文本格式,php,html,format,dropdown,Php,Html,Format,Dropdown,我的HTML代码中有一个下拉菜单,其中充满了PHP while循环。 例如: <select name="dd1" class="form-control" id="dd1"> <option value="" disabled="disabled" selected>Select...</option> <?php while($row = mysqli_fetch_array($sql, MYSQL_ASSOC)){ ?

我的HTML代码中有一个下拉菜单,其中充满了PHP while循环。 例如:

<select name="dd1" class="form-control" id="dd1">
   <option value="" disabled="disabled" selected>Select...</option>
   <?php 
     while($row = mysqli_fetch_array($sql, MYSQL_ASSOC)){
   ?>
   <option value="<?php echo $row['ID'] ?>"> <?php echo $row['PName'] .  "\t | " . $row['AName'] ?> </option>
   <?php 
     } 
   ?>    
</select> 

选择。。。

我想在名称1和名称2之间做一个制表。我尝试使用\t执行此操作,但已被忽略。 有人知道我能做什么吗

如果我使用&emsp;看起来是这样的:

<select name="dd1" class="form-control" id="dd1">
    <option value="" disabled="disabled" selected>Select...</option>
    <?php
    $widthLeft = 30; // width in symbols
    $widthRight = 30; // width in symbols
    $separator = '|';

    while ($row = mysqli_fetch_array($sql, MYSQL_ASSOC)) {
        $optionFormatted = mb_strpad($row['PName'], $widthLeft)
                . $separator
                . mb_strpad($row['AName'], $widthRight);
        $optionHtml = str_replace(' ', '&nbsp;', $optionFormatted);
        ?>
        <option value="<?php echo $row['ID'] ?>"> <?php echo $optionHtml ?> </option>
        <?php
    }
    ?>
</select>


我希望所有的第二个名字,也就是以|开头,都有相同的位置。

您可以使用
&emsp
而不是
\t
,然后查看您的输出

<select name="dd1" class="form-control" id="dd1">
   <option value="" disabled="disabled" selected>Select...</option>
   <?php 
     while($row = mysqli_fetch_array($sql, MYSQL_ASSOC)){
   ?>
   <option value="<?php echo $row['ID'] ?>"> <?php echo $row['PName'] .  "&emsp; | " . $row['AName'] ?> </option>
   <?php 
     } 
   ?>    
</select> 

选择。。。
您可以使用空格填充字符串,然后将空格替换为
(前提是使用单空格字体):


选择。。。

只需使用4
,它就可以复制@JoeBlack不,不是的,请阅读我的编辑,但它们的长度不尽相同,所以它们的名字有不同的位置,我编辑我的帖子,所以你可以看到我的意思谢谢你,部分有效。如果有像äüö或ß这样的乌姆劳特,那是不正确的anymore@Alex请检查我答案的更新,关于多字节字符串。
<?php
function mb_strpad(string $input, int $pad_length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, string $encoding = 'UTF-8'): string
{
    $diff = $pad_length - mb_strlen($input, $encoding);

    if ($diff <= 0) {
        return $input;
    }

    $pad = str_pad('', $diff, $pad_string);

    if ($pad_type === STR_PAD_LEFT) {
        return $pad . $input;
    }

    return $input . $pad;
}
<select name="dd1" class="form-control" id="dd1">
    <option value="" disabled="disabled" selected>Select...</option>
    <?php
    $widthLeft = 30; // width in symbols
    $widthRight = 30; // width in symbols
    $separator = '|';

    while ($row = mysqli_fetch_array($sql, MYSQL_ASSOC)) {
        $optionFormatted = mb_strpad($row['PName'], $widthLeft)
                . $separator
                . mb_strpad($row['AName'], $widthRight);
        $optionHtml = str_replace(' ', '&nbsp;', $optionFormatted);
        ?>
        <option value="<?php echo $row['ID'] ?>"> <?php echo $optionHtml ?> </option>
        <?php
    }
    ?>
</select>