我想通过数组来确定订单,以便对
下面的文件进行采样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>';
?>
是非常缺乏经验,直到现在只能读取文件并打印到视频,我会放一个可以定义自然顺序的数组,但它如何适合?
答案 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));