如何将我的数组分组为3个元素的组,按最后一个元素对它们进行排序并显示元素?

问题描述:

I'm trying to display my array in groups of 3 elements, sorted by the last element of each group.

My array:

$info = array('goal','raul','80','foul','moneer','20','offside','ronaldo','60');

My expected output is:

1-foul moneer 20
2-offside ronaldo 60
3-goal raul 80

Sorted by the last value of the element groups.

I'm using foreach to display it:

$i = 0;
foreach($info as $key => $val) {
    $i++;
    echo $info[$key] . '<br>';
    if ($i % 3 == 0){
        echo "<br />";
}

Is this possible ? And if yes, how can I change my code to get my expected output?

我正在尝试以3个元素为一组显示我的数组,按每个组的最后一个元素排序。

我的数组: p>

  $ info = array('goal','raul','80','foul','moneer  ','20','越位','罗纳尔多','60'); 
  code>  pre> 
 
 

我的预期输出是: p> 1-foul moneer 20 2-offside ronaldo 60 3-goal raul 80 code> pre>

按元素组的最后一个值排序。

我正在使用foreach来显示它: p>

  $ i = 0; 
foreach($ info as $ key =&gt; $  val){
 $ i ++; 
 echo $ info [$ key]。  '&lt; br&gt;'; 
 if($ i%3 == 0){
 echo“&lt; br /&gt;”; 
} 
  code>  pre> 
 
  
  div>

This should work for you:

First we array_chunk() your array into chunks of 3 elements, so your array will have this structure:

Array
(
    [0] => Array
        (
            [0] => goal
            [1] => raul
            [2] => 80
        )

    [1] => Array
        (
            [0] => foul
            [1] => moneer
            [2] => 20
        )

    [2] => Array
        (
            [0] => offside
            [1] => ronaldo
            [2] => 60
        )

)

After this we sort it by the last value (here key 2), with usort() by simply comparing the values. Then at the end you can just loop through your array and display the data.

<?php

    $info = array('goal','raul','80','foul','moneer','20','offside','ronaldo','60');
    $arr = array_chunk($info, 3);
    usort($arr, function($a, $b){
        if($a[2] == $b[2])
            return 0;
        return $a[2] > $b[2] ? 1 : -1;
    });

    foreach($arr as $k => $v)
        echo ($k+1) . "-" . implode(" ", $v) . "<br>";

?>

output:

1-foul moneer 20
2-offside ronaldo 60
3-goal raul 80