PHP数组排序&;在每次分组之后执行一个函数


PHP Array sorting & execute a function after each grouping

关于数组排序的绝对noob问题,我需要帮助。我使用的是我在这里找到的一个函数:以字母顺序PHP对数组结果进行分组按字母顺序对数组值进行排序。

$records = ['Aaaaa', 'Aaaa2', 'bbb', 'bbb2', 'Dddd'];
$lastChar = '';
sort($records, SORT_STRING | SORT_FLAG_CASE);
foreach($records as $val) {
  $char = $val[0]; //first char
  if ($char !== $lastChar) {
    if ($lastChar !== '')
      echo '<br>';
    echo strtoupper($char).'<br>'; //print A / B / C etc
    $lastChar = $char;
  }
 echo $val.'<br>';
}
?>

[EDIT]我想做的是将数组值的每个字母组导出到文件中,甚至不回显,这将是:

foreach(){
 $group = ??; //group values alphabetically into a variable
 export($group); //input the variable into my exporting function.
}

所以最终的结果是我会有单独的文件(即:a.txt,b.txt--z.txt)。我认为这可以用上面的函数来完成,我只是不知道把导出函数放在哪里。

希望我不会太困惑。

最简单的解决方案是只调用已经回显的函数。

例如:

echo '<br>'; // you can remove this line - its a marker for where to put it.
functionToCall();

更好的是,如果您将其编写为可重用的函数,则可以接受回调作为参数。例如:

function mySortFunction($records, callable $callback) {
  // ... do some sorting
  $callback(); // calls the function a.k.a. callback.
  // ... do some more sorting
}

并称之为:

mySortFunction(['somedata'], 'myFunctionName');
// OR
mySortFunction(['somedata'], function() {
    // write your callback function here if its short.
});

或者,如果您想将此函数转换为生成器,则可以使用yield结果。从广义上讲,收益率将取代回声

例如:

function mySortFunction($records) {
  // do some sorting
  yield $someValue;
  // continue to do more sorting.
}

然后你可以像这样使用它:

$last = '';
$generator = mySortFunction($records);
foreach($generator as $result) {
  if(substr($result, 0, 1) != $last && $last != '') {
    echo "<br>"; // put an extra line between each letter
  }
  echo $result
}