1

実行すると、phpに次のコードがあります。

<pre>
<?php
$input = '<xml>
<user>
    <name>sujit agarwal</name>
    <age>22</age>
    <gender>male</gender>
</user>
<user>
    <name>ajay rana</name>
    <age>25</age>
    <gender>male</gender>
</user>
<user>
    <name>pratap singh</name>
    <age>27</age>
    <gender>male</gender>
</user>
<user>
    <name>asdfasdfasdfasdf</name>
    <age>30</age>
    <gender>male</gender>
</user>
</xml>';
$sx = simplexml_load_string($input);
foreach($sx as $val)
echo $val->name."\t".$val->gender."\t".$val->age."\n";
?>
</pre>

出力は

sujit agarwal   male    22
ajay rana   male    25
pratap singh    male    27
asdfasdfasdfasdf    male    30

今、私の問題は、名前が他のものよりも長い場合でも、列内のすべての性別の値と年齢の値を揃える方法です。私の問題を明確にしたことを願っています。これは PRE タグ内で行われます。後でこれをTXTファイルに保存するため

必要なフォーマット

sujit agarwal       male    22
ajay rana           male    25
pratap singh        male    27
asdfasdfasdfasdf    male    30
4

4 に答える 4

1
<?php
$input = '<xml>
<user>
    <name>sujit agarwal</name>
    <age>22</age>
    <gender>male</gender>
</user>
<user>
    <name>ajay rana</name>
    <age>25</age>
    <gender>male</gender>
</user>
<user>
    <name>pratap singh</name>
    <age>27</age>
    <gender>male</gender>
</user>
<user>
    <name>asdfasdfasdfasdf</name>
    <age>30</age>
    <gender>male</gender>
</user>
</xml>';
$sx = simplexml_load_string($input);

$output='';
foreach($sx as $val){
    $values[] = $val->name;
    $values[] = $val->gender;
    $values[] = $val->age;
    $output.=vsprintf("%-30s %s\t %d",$values)."\n";
    $values='';
}

echo '<pre>';
echo $output;
echo '</pre>';
?>

出力:

sujit agarwal                  male  22
ajay rana                      male  25
pratap singh                   male  27
asdfasdfasdfasdf               male  30
于 2011-06-02T19:20:29.623 に答える
0

これはあまり難しくありません。

あなたがしなければならないことは、各列の「幅」を把握することです。次に、追加する必要があるタブの数を計算します。したがって、すべての行を 2 回ループする必要があります。最初に各列の最も広い値を決定し、次にデータと適切な量のタブを「印刷」します。

または、それを処理する HTML テーブルを使用することもできますが、それがオプションではないことは理解できます。

于 2011-06-02T18:13:00.630 に答える
0

2回ループする必要があります.1回目は個々のフィールドの最大長を確立し、2回目はその多くの空白でそれを書き出します(これには、 のようなものvsprintf('%45s %7s %-3d',$args);、または値が何であれ.

于 2011-06-02T18:14:46.490 に答える