Moje pytanie jest trochę pogmatwane, mam nadzieję, że będę w stanie to wyjaśnić. Wyodrębniam tablicę z bazy danych i wynik jest podobny do tego.

Array
(
    [0] => Array
        (
            [subject_id] => 5
            [subject_name] => Pakistan Studies
            [class_title] => Commerce B
            [class_id] => 1
        )

    [1] => Array
        (
            [subject_id] => 12
            [subject_name] => Mathematics
            [class_title] => Pre-Engineering
            [class_id] => 4
        )

    [2] => Array
        (
            [subject_id] => 22
            [subject_name] => Physics
            [class_title] => Pre-Medical A
            [class_id] => 6
        )

    [3] => Array
        (
            [subject_id] => 16
            [subject_name] => Psychology
            [class_title] => Humanities
            [class_id] => 2
        )

    [4] => Array
        (
            [subject_id] => 16
            [subject_name] => Psychology
            [class_title] => Humanities
            [class_id] => 2
        )

    [5] => Array
        (
            [subject_id] => 15
            [subject_name] => Accounting I
            [class_title] => Commerce B
            [class_id] => 1
        )

    [6] => Array
        (
            [subject_id] => 6
            [subject_name] => Computer
            [class_title] => Commerce B
            [class_id] => 1
        )

    [7] => Array
        (
            [subject_id] => 6
            [subject_name] => Computer
            [class_title] => Pre-Engineering
            [class_id] => 4
        )

)

Chcę uzyskać wynik w tej formie

Array(['Commerce'=>'Computer','Accounting','Pakistan Studies'],
                 ['Pre-Engineering' =>'Computer','Mathematics'],
                 ['Humanities'    => 'Psycholgy'])

Czy ktoś może zasugerować, jakie logiki można zastosować w PHP. Byłbym naprawdę wdzięczny. Oto zrzut ekranu tutaj wprowadź opis obrazu

-1
Sijran 31 marzec 2020, 17:28

3 odpowiedzi

Najlepsza odpowiedź

Można to osiągnąć za pomocą prostej pętli foreach, tworząc nową tablicę w żądanym formacie

foreach($array as $in){
    $new[$in['class_title']][] = $in['subject_name'];
}
0
RiggsFolly 31 marzec 2020, 14:40

Cześć oczekiwanym wynikiem powinna być tablica „class_title” z wartością tablicy „subject_name” w następujący sposób:

$result = [
    'Commerce' => ['computer', 'accounting', 'Pakistan Studies'],
    'Pre-Engineering' => ['Computer', 'Mathematics'],
    'Humanities' => ['Psycholgy']
];

Aby się tam dostać, masz dwie opcje, albo przeglądasz całą tablicę wejściową i tworzysz podtablice w oparciu o „class_title”.

$result = [];
foreach($courses as $course) {
    $result[$course['class_title']][] = $course['subject_name'];
}

Lub robisz dokładnie to samo, ale używając funkcji "array_reduce".

$result = array_reduce($courses, function($acc, $course) {
    $acc[$course['class_title']][] = $course['subject_name'];
    return $acc;
}, []);
0
bernard-ng 31 marzec 2020, 15:03

Możesz rozwiązać to za pomocą reduktora:

$result = array_reduce($yourArray, function($acc, $item){
    $acc[$item['class_title']][] = $item['subject_name'];
  });

Lub używasz normalnego foreach:

$result = [];
foreach( $yourArray as $item ){
  $result[$item['class_title']][] = $item['subject_name'];
}

Oba dają wynik:

[
  'Commerce' => ['Computer','Accounting','Pakistan Studies'],
  'Pre-Engineering' => ['Computer','Mathematics'],
  'Humanities' => ['Psycholgy']
]
0
daddykom 31 marzec 2020, 14:54