2017-02-26 150 views
-1

我写了这个:PHP填充字符串包含特殊字符

$date = $_SESSION['basket']['date']; 
$number = $_SESSION['basket']['number']; 
$type = $_SESSION['basket']['type']; 

if ($number > 9) { 
    $fill = "********"; 
} else { 
    $fill = "*********"; 
} 

echo "<pre>Date   | Number | Type |</pre>"; 

foreach ($date as $key => $value) { 
    echo "<pre>" . $date[$key] . " | " . $number[$key] . $fill . "| " . $type[$key] . "</pre>"; 
} 

$数量始终(天数)1和14之间的值,即一个或两个字符。目标是在我的输出中有一个很好的对齐方式。这里是我的输出结果:

Date   | Number | Type 
28.02.2017 | 2********| Top 
26.02.2017 | 11********| Basic 

这不是工作,$填充的值总是相同的,的其他选项,如果我似乎没有得到认可。任何想法如何解决这个问题?谢谢。

回答

0

if - else声明构造不正确。
使用以下命令:

if ($number > 9) { 
    $fill = "********"; 
} else { 
    $fill = "*********"; 
} 

甚至使用str_pad功能:

... 
$number = str_pad($number, 9, '*', STR_PAD_RIGHT); 
... 
0

在我看来,你的else语句的结束你架处于错误的位置。如果不是你的,如果别的块是这个样子?:

if ($number > 9)  { 
    $fill = "********"; 
} else { 
    $fill = "*********"; 
} 
2

将使用str_pad function

$targetLenght = 12; 
$string ='Text'; 

$string = str_pad($string , $targetLenght, '*'); 
echo $string; 

结果正确的方法: 文本********

+0

权str_pad使用这个问题方面:) – hassan

0

您可以使用str_pad功能:

$ number = str_pad($ number,9,'*',STR_PAD_RIGHT);

它是如何工作的IR您的情况:

function padNumber($number) 
{ 
    return str_pad($number, 9, '*', STR_PAD_RIGHT); 
} 

foreach ($date as $key => $value) 
{ 
    echo sprintf("<pre>%s|%s|%s</pre>", $date[$key], padNumber($number[$key]), $type[$key]); 
} 
0
if ($number > 9) 

这SEMES对我说,$数是一个数组不是?所以你需要写这样的东西:

if($number[$index] > 9) 

这是一个改进的代码检查它。

$date = $_SESSION['basket']['date']; 
$number = $_SESSION['basket']['number']; 
$type = $_SESSION['basket']['type']; 

echo "<pre>Date   | Number | Type |</pre>"; 

foreach ($date as $key => $value){ 
if ($number[$key] > 9)  { 
    $fill = "********"; 
}else $fill = "*********"; { 
} 
echo "<pre>$date[$key] . " | " . $number[$key] . $fill . "| " .$type[$key]."</pre>";  
} 
+0

非常感谢Kark92,您的解决方案是为我好。其作品。 –