无法在多维php数组中对选定的key =>值对进行排序

时间:2013-09-13 15:26:57

标签: javascript php arrays sorting

<?php

// Open the file
$filename = 'pvemail.txt';
$fp = fopen($filename, 'r'); 
// Add each line to an array
if ($fp) {
   $array = explode("\n", fread($fp, filesize($filename)));
}
//print_r ($array);
for ($c = 0; $c < count($array); $c++){
    $cell = explode(",", $array[$c]);
//print_r ($cell);

if ($cell[3] == 'ACTIVE')
    {
    echo $cell[2].' - '.$cell[12].' '.$cell[11];
    echo '<br/>';
    }
}
?>

此代码采用CSV文件,读取它,第一个if语句将文件的每一行分解为自己的数组。 for循环将这些行中的每一行分解为由20个key =&gt;值对组成的数组。然后第二个if语句循环遍历这些对以提取并向屏幕打印我想要的三对。
我遇到的问题是我现在希望数据按字母顺序排序,到目前为止无论我使用什么sort()函数,或者我把它放在哪里,都没有任何反应。
我尝试在for循环和第二个if循环之间使用sort($cell)但没有发生任何事情,我尝试在内部使用相同的代码,之后,if循环并没有发生任何事情,我尝试将$ cell数组移动到另一个数组和排序,我已经尝试ksort($cellasort($cell),我甚至尝试将数组传递给JavaScript并按照这种方式排序,没有任何事情发生!
我开始把头发拉到这里,是否有任何明显的我缺少或没有做到这一点正在停止排序工作?

1 个答案:

答案 0 :(得分:0)

排序$cell没有意义,因为它代表一行,而不是整个文件。

但我们首先要简化代码。该行将单独加载您的数据并将其转换为多维数组:

$data = array_map('str_getcsv', file('pvemail.txt'));

然后,您可以使用带有回调函数的usort根据您想要的任何列对此行数组进行排序(“按字母顺序”不是很清楚)。 This question显示了如何做到这一点(披露:我也有答案)。

假设您要根据第一列进行排序,您可以

usort($data, function($a, $b) { return strcmp($a[0], $b[0]); });

应该是这样,然后您可以使用foreach打印出结果。