PHP : как получить данные в порядке desc и diaplay данные в массиве?


PHP : как получить данные в порядке desc и diaplay данные в массиве?

04.11.2020 06:56:59 Просмотров 5 Источник

У меня есть данные в массиве, и я хочу получить топ-5 данных из массива и хочу отобразить их на странице просмотра. Мой код для этой функции таков :

public function dataStudentGraph($data) {

        $labels = [];
        $graph_data = [];
        foreach ($data['data'] as $student) {
                $labels[] = $student['name'];
                $graph_data[] = $student['total'];
            
        }

        $array = [
            [
                'label' => 'Total Student',
                'color' => '#fec12c',
                'data' => $graph_data
            ]
        ];
        $graph_data = [];

        return [
            'labels' => $labels,
            'datasets' => $array
        ];
    }

Мой просмотр кода страницы:

<div class="ibox-content"> 
    {!! $student_graph !!}
</div>

Я хочу получить топ-5 данных студента['total'] в порядке убывания. Пожалуйста помочь.

У вопроса есть решение - Посмотреть?

Ответы - PHP : как получить данные в порядке desc и diaplay данные в массиве? / PHP : How to get data in desc order and diaplay data in array?

Является ответом!
Kamlesh Paul

04.11.2020 07:01:21

вы можете использовать манипуляцию данными массива rsort() для заказа des и array_slice() для получения 5

public function dataStudentGraph($data)
{

    $labels = [];
    $graph_data = [];
    foreach ($data['data'] as $student) {
        $labels[] = $student['name'];
        $graph_data[] = $student['total'];
    }
    $backupData = $graph_data;
    rsort($graph_data); // des order 

    $sortedLabels = [];
    foreach ($graph_data as $i => $data) {
        $index = array_search($data, $backupData);
        $sortedLabels[$i] = $labels[$index];
    }

    $array = [
        [
            'label' => 'Total Sales',
            'color' => '#fec12c',
            'data' => array_slice($graph_data, 0, 5) // take 5 
        ]
    ];
    $graph_data = [];
    return [
        'labels' => $sortedLabels,
        'datasets' => $array
    ];
}

реф ссылки

https://www.w3schools.com/php/php_arrays_sort.asp https://www.w3schools.com/php/func_array_slice.asp https://www.php.net/manual/en/function.array-search.php

zahid hasan emon

04.11.2020 08:44:53

вы можете просто отсортировать свой родительский массив, а затем взять свои данные из этого массива. допустим, у вас есть массив типа

$data = array(
    array(
        "name"=>"Urus", 
        "total"=>60
    ),
    array(
        "name"=>"Cayenne", 
        "total"=>85
    ),
    array(
        "name"=>"Bentayga", 
        "total"=>55
    ),
    array(
        "name"=>"Lamborghini", 
        "total"=>85
    ),
    array(
        "name"=>"Porsche", 
        "total"=>90
    ),
    array(
        "name"=>"Bentley", 
        "total"=>55
    ),
    array(
        "name"=>"Nissan", 
        "total"=>70
    ),
);

теперь вы хотите отсортировать этот массив, используя общую сумму внутреннего массива. используйте функция array_multisort и array_column , чтобы сделать это.

array_multisort( array_column($data, "total"), SORT_DESC, $data );

это приведет к созданию отсортированного массива типа

array:7 [▼
  0 => array:2 [▼
    "name" => "Porsche"
    "total" => 90
  ]
  1 => array:2 [▼
    "name" => "Cayenne"
    "total" => 85
  ]
  2 => array:2 [▼
    "name" => "Lamborghini"
    "total" => 85
  ]
  3 => array:2 [▼
    "name" => "Nissan"
    "total" => 70
  ]
  4 => array:2 [▼
    "name" => "Urus"
    "total" => 60
  ]
  5 => array:2 [▼
    "name" => "Bentayga"
    "total" => 55
  ]
  6 => array:2 [▼
    "name" => "Bentley"
    "total" => 55
  ]
]

а теперь тебе больше нечего делать. просто зацикливайтесь на массиве и принимайте значения.

$labels = $graph_data = [];   
foreach ($data as $key => $student) {
    if ($key < 5) {
        $labels[] = $student['name'];
        $graph_data[] = $student['total'];
    } else {
        break;
    }  
}

$array = [
    [
        'label' => 'Total Sales',
        'color' => '#fec12c',
        'data' => $graph_data
    ]
];

$graph_data = [];

return [
    'labels' => $labels,
    'datasets' => $array
];
Помочь в развитии проекта:
Закрыть X