订购文本文件行

时间:2017-04-10 13:31:35

标签: php

我想通过数组来确定订单,以便对

下面的文件进行采样
Carlo>Portiere
Marco>Attaccante
Paolo>Difensore
Antonio>Ala destra
Andrea>Ala sinistra

我希望我可以使用文件行squadra.txt

的数组排列进行更改
Carlo>Portiere
 Paolo>Difensore
 Antonio>Ala destra
 Andrea>Ala sinistra
 Marco>Attaccante

这和我用来查看文件squadra.txt

的PHP代码
    <?php
// setto il file da leggere
$txt = "squadra.txt";
$array = array("Portiere", "Difensore", "Ala destra", "Ala sinistra", "Attaccante");

// leggo rigo per rigo
$righi = file($txt);

// ordino
sort($righi);

// ordino secondo l'array
natsort($array);
echo "\nNatural order sorting\n";
print_r($array);

// visualizziamo
echo '<pre>';
print_r($righi);
echo '</pre>';
?>

是非常缺乏经验,直到现在只能读取文件并打印到视频,我会放一个可以定义自然顺序的数组,但它如何适合?

1 个答案:

答案 0 :(得分:0)

您可以为每个角色分配相对权重,然后将文件分成多行,然后可以将这些行拆分为播放器和角色。构建一个以角色权重为关键字的新数组。按降序对此数组进行排序。

试试这个:

$weights = array("Portiere"=>100, "Difensore"=>90, "Ala destra"=>80, "Ala sinistra"=>70, "Attaccante"=>60);

$lines = explode(PHP_EOL, $righi);
foreach($lines as $id => $player){
  list($name, $position) = explode(">", $player);
  $weighted[$weights[trim($position)]] = array('name'=>$name, 'position'=>$position);
}

//sort by keys (reverse order ... descending)
krsort($weighted);

echo '<pre>';
print_r($weighted);
echo '</pre>';

修改

我的错误。你正在使用file(),所以$ righi已经是一个数组,从文件中获取每一行作为条目。

更改

$lines = explode(PHP_EOL, $righi);
foreach($lines as $id => $player){

到此

foreach($righi as $id => $player){

另外,如果你想看到它作为字符串而不是详细的数组返回,那么执行此操作而不是print_r()

foreach($weighted as $player){
  echo implode(">",$player)."<br>";
}

编辑文件输出

这应该会帮助你。它还简化了一些$加权数组结构 - 如果你不在其他任何地方使用数组元素。

foreach($righi as $id => $player){
  list($name, $position) = explode(">", $player);
  $weighted[$weights[trim($position)]] = trim($player);
}

//sort by keys (reverse order ... descending)
krsort($weighted);

//output to screen
echo implode("<br>",$weighted);

//overwrite original file
file_put_contents($txt, implode(PHP_EOL, $weighted));