формирование строки php - PullRequest
1 голос
/ 07 марта 2011

У меня очень простой вопрос, для меня не простой, потому что я студент, но где-то я должен начать, поэтому вопрос у меня есть строковый массив

array("+9%","+12%","+1%")

Как я могу отформатировать строку вывода, например, в браузере, я хочу так:

+ 9 %
+12 %
+ 1 %

Спасибо за помощь.

Ответы [ 7 ]

2 голосов
/ 07 марта 2011

Посмотрите на эту страницу:

http://ch2.php.net/manual/fr/function.sprintf.php

Это должно быть что-то вроде:

$values = array("+9%","+12%","+1%");
echo sprintf ("+%2d \n+%2d \n+2%d", intval($values[0]), intval($values[1]), intval($values[2])); 
1 голос
/ 07 марта 2011

Предполагая, что пробелы в выходных данных являются опечаткой

Вы можете использовать цикл foreach() для перебора массива

$myArray = array("+9%","+12%","+1%");
foreach ($myArray  as $elem) { 
   echo $elem . '<br>'; //BR is for breaks in the browser.
}

Если пробелы не опечатка,становится немного сложнее

$myArray = array("+9%","+12%","+1%");
foreach ($myArray  as $elem) { 
   $sign    = $elem[0]; //gets the first element of the string treated as an array
   $number  = substr($elem, 1, strpos($elem, '%') - 1); //gets the number part by starting from the left and going till you hit a % sign
   $percent = $elem[strlen($elem) - 1]; //getting the last part of the string
   echo "{$sign} {$number} {$percent} <br>";
}

Приведенный выше код довольно условен и работает ТОЛЬКО для вашего массива, но я видел более странные домашние задания.

0 голосов
/ 07 марта 2011

Немного выше ;-):

$array = array(
    '+196%',
    '+ 12%',
    '- 16 pct',
    '-84 %'
);

$rows = array();
foreach( $array as $element )
{
    preg_match( '/(?<sign>[-+])?\s?(?<number>[0-9]+)?\s?(?<remaining>.*)/', $element, $matches );
    $rows[] = '<div><span class="sign">' . $matches[ 'sign' ] . '</span><span class="number">' . $matches[ 'number' ] . '</span><span class="remaining">' . $matches[ 'remaining' ] . '</span></div>';
}

echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Rows of data</title>
<style type="text/css">
span {
    float: left;
}
.sign {
    clear: left;
    width: 1ex;
}
.number {
    width: 4ex;
    padding-right: 1ex;
    text-align: right;
}
</style>
</head>
<body>
' . implode( PHP_EOL, $rows ) .  '
</body>
</html>';
0 голосов
/ 07 марта 2011

Как решение, которое работает с отрицательными числами и нулями, а также является более компактным:

$arr = array("+9%","+12%","+1%");
foreach($arr as $num) {
    echo preg_replace("~^([+-]?)(\d+)%$~e", "sprintf('%1s%2s %%', '$1', $2)",  $num)."<br/>";
}
0 голосов
/ 07 марта 2011

Иногда ответы на эти вопросы требуют заметных предостережений, так что вот мои.

[1] Я предполагаю, что все значения в массиве будут в процентах, поэтому я исключил их из моего начального массива и добавил их при печати строки.

[2] Я допускаю положительный или отрицательный знак в начале каждого элемента.

[3] Я ожидаю, что числовое значение будет целым числом (я предполагаю, что вы хотите выравнивание как выв вашем вопросе, где каждое значение занимает два пробела)

Если какое-либо из этих предположений неверно, приведенный ниже код необходимо изменить, чтобы учесть изменения.

<?php

$arrPercentages = array('+9','+12','+1');

foreach($arrPercentages as $strPercentage) {

    // Get rid of any spaces
    $strPercentage = str_replace(' ', '', $strPercentage);

    // Parse out the number
    preg_match('/([\-\+]{1})([0-9]+)/', $strPercentage, $arrMatches);

    // Don't continue if we didn't get a sign and number out of the string
    if(count($arrMatches)) {

        // Assign the "sign" to a variable
        $strSign = $arrMatches[1];

        // The number we want to print out as two character spaces
        $strNumber = $arrMatches[2];

        // Print it out!
        echo $strSign.sprintf("%2s", $strNumber).'%<br>';

    }

}

?>
0 голосов
/ 07 марта 2011

Мои два цента:

foreach ($data as $entry) {  
    echo '+'.str_pad(trim(str_replace(array('+', '%'), $entry)), 2).' %';
}
0 голосов
/ 07 марта 2011
<?
 foreach($yourarray as $element) {
    echo $element."<br />";
}


?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...