我有一个很大的问题,我找不到任何方法来排序数组条目。我的代码:
<?php
error_reporting(0);
$lines=array();
$fp=fopen('file.txt, 'r');
$i=0;
while (!feof($fp))
{
$line=fgets($fp);
$line=trim($line);
$lines[]=$line;
$oneline = explode("|", $line);
if($i>30){
$fz=fopen('users.txt', 'r');
while (!feof($fz))
{
$linez=fgets($fz);
$linez=trim($linez);
$lineza[]=$linez;
$onematch = explode(",", $linez);
if (strpos($oneline[1], $onematch[1])){
echo $onematch[0],$oneline[4],'<br>';
}
else{
}
rewind($onematch);
}
}
$i++;
}
fclose($fp);
?>
问题是,我想对$ oneline [4]回应的项目进行排序。我从stackoverflow尝试了几个其他帖子 - 但是找不到解决方案。
答案 0 :(得分:2)
您的问题的解决方案是,为了对$oneline[4]
进行排序(似乎包含字符串值),您需要应用以下步骤:
$oneline[4] = explode(',',
$oneline[4])
)sort($oneline[4])
)$oneline[4] = implode(',',
$oneline[4])
)由于我得到的印象变量命名在优先级列表中很低,我正在重新使用$oneline[4]
变量。主要是为了澄清我所指的代码的哪一部分。
话虽如此,如果您希望与未来的自我交谈(如果您需要在几个月内处理此代码),那么您应该进行其他改进。
agents.data
可以包含31行,而users.txt
只会打开一次,导致我看起来像傻瓜)我已更新您的代码示例,以尝试通过上述各点显示我的意思。
<?php
error_reporting(0);
$lines = array();
$users = false;
$fp = fopen('http://20.19.202.221/exports/agents.data', 'r');
while ($fp && !feof($fp)) {
$line = trim(fgets($fp));
$lines[] = $line;
$oneline = explode('|', $line);
// if we have $users (starts as false, is turned into an array
// inside this if-block) or if we have collected 30 or more
// lines (this condition is only checked while $users = false)
if ($users || count($lines) > 30) {
// your code sample implies the users.txt to be small enough
// to process several times consider using some form of
// caching like this
if (!$users) {
// always initialize what you intend to use
$users = [];
$fz = fopen('users.txt', 'r');
while ($fz && !feof($fz)) {
$users[] = explode(',', trim(fgets($fz)));
}
// always close whatever you open.
fclose($fz);
}
// walk through $users, which contains the exploded contents
// of each line in users.txt
foreach ($users as $onematch) {
if (strpos($oneline[1], $onematch[1])) {
// now, the actual question: how to sort $oneline[4]
// as the requested example was not available at the
// time of writing, I assume
// it to be a string like: 'b,d,c,a'
// first, explode it into an array
$oneline[4] = explode(',', $oneline[4]);
// now sort it using the sort function of your liking
sort($oneline[4]);
// and implode the sorted array back into a string
$oneline[4] = implode(',', $oneline[4]);
echo $onematch[0], $oneline[4], '<br>';
}
}
}
}
fclose($fp);
我希望这不会冒犯你太多,只是试图提供帮助,而不仅仅是为手头的问题提供解决方案。