Ich habe Zweifel, dass PHP-Arrays den Array-Schlüsselwert erhalten und denselben Schlüssel zählen, der im PHP-Array wiederholt wird. Hier poste ich meine Array-Objektausgabe über die eine Variable, die diese Daten erhält. Hier ist meine Anforderung in diesem Array, ich habe [Raumtyp] und [Mahlzeitentyp].

Hier [room_type] => APARTMENT ONE BEDROOM ist 3 mal in diesem Array. Mein erforderliches Ergebnis ist also 3 x WOHNUNG EIN SCHLAFZIMMER Hier [Zimmertyp] => WOHNUNG ZWEI SCHLAFZIMMER ist 2 Mal in diesem Array enthalten. Mein erforderliches Ergebnis ist also 2 x WOHNUNG ZWEI SCHLAFZIMMER Hier [room_type] => WOHNUNG DREI SCHLAFZIMMER ist 1 Mal in diesem Array. Mein erforderliches Ergebnis ist also 1 x WOHNUNG DREI SCHLAFZIMMER

$room_details =  
Array
(
    [0] => stdClass Object
        (
            [id] => 4508
            [api] => hotelbeds
            [room_no] => 1
            [room_type] => APARTMENT ONE BEDROOM
            [meal_type] => ONE ROOM
            [updated_on] => 2019-01-16 13:03:17
        )

    [1] => stdClass Object
        (
            [id] => 4509
            [room_no] => 2
            [room_type] => APARTMENT TWO BEDROOM
            [meal_type] => TWO ROOMS
            [updated_on] => 2019-01-16 13:03:09
        )

    [2] => stdClass Object
        (
            [id] => 4510
            [room_no] => 3
            [room_type] => APARTMENT ONE BEDROOMS
            [meal_type] => TWO ROOMS
            [updated_on] => 2019-01-16 13:03:38
        )

    [3] => stdClass Object
        (
            [id] => 4511
            [room_no] => 3
            [room_type] => APARTMENT TWO BEDROOMS
            [meal_type] => TWO ROOMS
            [updated_on] => 2019-01-16 13:03:38
        )

    [4] => stdClass Object
        (
            [id] => 4512
            [room_no] => 3
            [room_type] => APARTMENT THREE BEDROOMS
            [meal_type] => THREE ROOMS
            [updated_on] => 2019-01-16 13:03:38
        )

    [5] => stdClass Object
        (
            [id] => 4513
            [room_no] => 3
            [room_type] => APARTMENT ONE BEDROOMS
            [meal_type] => ONE ROOM
            [updated_on] => 2019-01-16 13:03:38
        )
)

Dieses Ergebnis möchte ich in einem Div-Tag wie diesem zeigen.

<div class="roomtype">
<p>
3 x APARTMENT ONE BEDROOM
2 x APARTMENT TWO BEDROOM
1 x APARTMENT THREE BEDROOM
</p>
</div>

Und [Mahlzeit_Typ] => EIN ZIMMER kam 2 Mal in dieses Array, also ist das Ergebnis 2 x EIN ZIMMER [Mahlzeit_Typ] => ZWEI ZIMMER kamen 3 Mal in dieses Array, so dass das Ergebnis 3 x ZWEI ZIMMER [Mahlzeit_Typ] => DREI ZIMMER kamen herein Dieses Array 1 Mal, also Ergebnis ist 1 x DREI ZIMMER Dieses Ergebnis möchte ich in einem anderen Div-Tag wie diesem zeigen.

<div class="mealtype">
<p>
2 x ONE ROOM 
3 x TWO ROOMS
1 x THREE ROOMS
</p>
</div>

Ich habe unten versucht, dass der Code nicht funktioniert. Kann mir bitte jemand dabei helfen?

                                        For Meal Type 
                                        --------------
                                        $countedValues = array_count_values($room_details->meal_type);
                                        //Build strings from value and display them.
                                        foreach( $countedValues as $roomType=>$count ){
                                            echo $count . ' x ' . $Mealtype . '<br />';
                                        }

                                        For Room Type 
                                        --------------
                                        $countedValues = array_count_values($room_details->room_type);
                                        //Build strings from value and display them.
                                        foreach( $countedValues as $roomType=>$count ){
                                            echo $count . ' x ' . $roomType . '<br />';
                                        }
-3
Niranjan 20 Jän. 2019 im 17:07

4 Antworten

Beste Antwort

Hallo Niranjan,

Sie können Ihr Array durchlaufen und diese Daten wie folgt zählen:

<?php
$room_details = array(
    array(
        "id" => 4508, 
        "api" => "hotelbeds",
        "room_no" => 1,
        "room_type" => "APARTMENT ONE BEDROOMS",
        "meal_type" => "ONE ROOM",
        "updated_on" => "2019-01-16 13:03:17"
    ),
    array(
        "id" => 4509,
        "room_no" => 2,
        "room_type" => "APARTMENT TWO BEDROOMS",
        "meal_type" => "TWO ROOMS",
        "updated_on" => "2019-01-16 13:03:09"
    ),
    array(
        "id" => 4510,
        "room_no" => 3,
        "room_type" => "APARTMENT ONE BEDROOMS",
        "meal_type" => "TWO ROOMS",
        "updated_on" => "2019-01-16 13:03:38"
    ),
    array(
        "id" => 4511,
        "room_no" => 3,
        "room_type" => "APARTMENT TWO BEDROOMS",
        "meal_type" => "TWO ROOMS",
        "updated_on" => "2019-01-16 13:03:38"
    ),
    array(
        "id" => 4512,
        "room_no" => 3,
        "room_type" => "APARTMENT THREE BEDROOMS",
        "meal_type" => "THREE ROOMS",
        "updated_on" => "2019-01-16 13:03:38"
    ),
    array(
        "id" => 4513,
        "room_no" => 3,
        "room_type" => "APARTMENT ONE BEDROOMS",
        "meal_type" => "ONE ROOM",
        "updated_on" => "2019-01-16 13:03:38"
    )
);

$room_types = [];
$meal_types = [];

foreach($room_details as $k => $v) {
    if(!array_key_exists($v["room_type"], $room_types)) {
        $room_types[$v["room_type"]] = 1;
    } else {
        $room_types[$v["room_type"]] = $room_types[$v["room_type"]] + 1;
    }

    if(!array_key_exists($v["meal_type"], $meal_types)) {
        $meal_types[$v["meal_type"]] = 1;
    } else {
        $meal_types[$v["meal_type"]] = $meal_types[$v["meal_type"]] + 1;
    }
}

print_r($room_types);
print_r($meal_types);
?>

Jetzt können Sie auf diese Arrays zugreifen, um die Anzahl abzurufen.

1
Sebastian Waldbauer 20 Jän. 2019 im 14:27

Versuchen Sie etwas wie das Folgende:

<?php

$room_details = array(
    (object)array(
                'id' => 4508,
                'api' => 'hotelbeds',
                'room_no' => 1,
                'room_type' => 'APARTMENT ONE BEDROOM',
                'meal_type' => 'ONE ROOM',
                'updated_on' => '2019-01-16 13:03:17'
        ),

    (object)array(
                'id' => 4509,
                'room_no' => 2,
                'room_type' => 'APARTMENT TWO BEDROOM',
                'meal_type' => 'TWO ROOMS',
                'updated_on' => '2019-01-16 13:03:09'
        ),

    (object)array(
                'id' => 4510,
                'room_no' => 3,
                'room_type' => 'APARTMENT ONE BEDROOM',
                'meal_type' => 'TWO ROOMS',
                'updated_on' => '2019-01-16 13:03:38'
        ),
);

$countedValues = array_count_values(
     array_map(function($x){
                return $x->meal_type;
      },$room_details)
 );

 //Build strings from value and display them.
foreach( $countedValues as $mealtype=>$count ){
        echo $count . ' x ' . $mealtype . '<br />';
}

Beispielausgabe:

1 x ONE ROOM<br />
2 x TWO ROOMS<br />

Sie können beide Beispiele unter Online-PHP-REPL ausprobieren

Machen Sie es ähnlich, um room_type Zählungen zu extrahieren (können Sie es herausfinden?)

HINWEIS Wenn Ihre PHP-Version functions nicht unterstützt, können Sie create_function zum dynamischen Erstellen einer Funktion zum Extrahieren eines geeigneten Felds aus dem room Objekt oder noch besser zum einfachen Zählen der Frequenzen mithilfe einer benutzerdefinierten foreach - Schleife (können Sie es sich vorstellen) aus?)

Um beispielsweise die Frequenzen ohne mit array_count_values zu zählen, können Sie Folgendes tun:

<?php

$room_details = array(
    (object)array(
                'id' => 4508,
                'api' => 'hotelbeds',
                'room_no' => 1,
                'room_type' => 'APARTMENT ONE BEDROOM',
                'meal_type' => 'ONE ROOM',
                'updated_on' => '2019-01-16 13:03:17'
        ),

    (object)array(
                'id' => 4509,
                'room_no' => 2,
                'room_type' => 'APARTMENT TWO BEDROOM',
                'meal_type' => 'TWO ROOMS',
                'updated_on' => '2019-01-16 13:03:09'
        ),

    (object)array(
                'id' => 4510,
                'room_no' => 3,
                'room_type' => 'APARTMENT ONE BEDROOM',
                'meal_type' => 'TWO ROOMS',
                'updated_on' => '2019-01-16 13:03:38'
        ),
);

$freq = array();
foreach($room_details as $roomObj) {
    $roomType = $roomObj->room_type;
    if ( !isset($freq[$roomType]) ) $freq[$roomType] = 1;
    else $freq[$roomType]++;
}

foreach($freq as $roomType=>$count) {
   echo $count . ' x ' . $roomType . '<br />';
}
0
Nikos M. 20 Jän. 2019 im 14:29

Sie müssen einfach die S in room_type-Werten entfernen und einen Schlüssel ohne S erstellen, z. B.: $key = str_replace("S", "", $roomDetail['room_type']); und ein weiteres Array mit dem Ergebnis der Anzahl der $ key wie folgt erstellen:

$result = [];
foreach($room_details as $roomDetail) {
        $key = str_replace("S", "", $roomDetail['room_type']);
        echo $key;
        echo "\n";
        $result[$key] += 1;
}
print_r($result);

Code-Ausgabe:

Array
(
   [APARTMENT ONE BEDROOM] => 3
   [APARTMENT TWO BEDROOM] => 2
   [APARTMENT THREE BEDROOM] => 1
)

Von diesem $result aus können Sie es nach Belieben verketten.

0
krishna Prasad 20 Jän. 2019 im 14:32

Eine Variation der anderen Antworten ....

$room_details = array(
    (object)array(
            'id' => 4508,
            'api' => 'hotelbeds',
            'room_no' => 1,
            'room_type' => 'APARTMENT ONE BEDROOM',
            'meal_type' => 'ONE ROOM',
            'updated_on' => '2019-01-16 13:03:17'
        ),
        (object)array(
            'id' => 4509,
            'room_no' => 2,
            'room_type' => 'APARTMENT TWO BEDROOM',
            'meal_type' => 'TWO ROOMS',
            'updated_on' => '2019-01-16 13:03:09'
        ),
        (object)array(
            'id' => 4510,
            'room_no' => 3,
            'room_type' => 'APARTMENT ONE BEDROOMS',
            'meal_type' => 'TWO ROOMS',
            'updated_on' => '2019-01-16 13:03:38'
        ),
        (object)array(
            'id' => 4511,
            'room_no' => 3,
            'room_type' => 'APARTMENT TWO BEDROOMS',
            'meal_type' => 'TWO ROOMS',
            'updated_on' => '2019-01-16 13:03:38'
        ),
        (object)array(
            'id' => 4512,
            'room_no' => 3,
            'room_type' => 'APARTMENT THREE BEDROOMS',
            'meal_type' => 'THREE ROOMS',
            'updated_on' => '2019-01-16 13:03:38'
        ),
        (object)array(
            'id' => 4513,
            'room_no' => 3,
            'room_type' => 'APARTMENT ONE BEDROOMS',
            'meal_type' => 'ONE ROOM',
            'updated_on' => '2019-01-16 13:03:38'
        )
);

Und um das Array zu verarbeiten

$rooms=$meals=[];
foreach( $room_details as $index => $obj ){
    $room = rtrim( $obj->room_type,'S');
    $meal = rtrim( $obj->meal_type,'S');

    $rooms[ $room ]=empty( $rooms[ $room ] ) ? 1 : $rooms[ $room ] + 1;
    $meals[ $meal ]=empty( $meals[ $meal ] ) ? 1 : $meals[ $meal ] + 1;
}


foreach( $rooms as $key => $count )printf('%d x %s<br />',$count,$key);
foreach( $meals as $key => $count )printf('%d x %s<br />',$count,$key);

Ausgänge:

3 x APARTMENT ONE BEDROOM
2 x APARTMENT TWO BEDROOM
1 x APARTMENT THREE BEDROOM
2 x ONE ROOM
3 x TWO ROOM
1 x THREE ROOM
0
RamRaider 20 Jän. 2019 im 14:34