Loading...
Knightwalker avatar Knightwalker 38 Точки

06. Store Boxes | Objects and Classes | PHP

Задача 06. Store Boxes - https://judge.softuni.bg/Contests/Practice/Index/1221#5

Как се сортира лист от обекти? Някой може ли да обясни... Задачата съм я решил малко по различно, вместо с 2 класа с 1, понеже видях единия клас за излишен, но да... Стигам до сортировката и не мога да я измисля.

<?php

class StoreBox 
{
  private $serialNumber;
  private $itemName;
  private $itemQuantity;
  private $itemPrice;
  private $boxPrice;

  public function __construct($serialNumber, $itemName, $itemQuantity, $itemPrice, $boxPrice) {
    $this->serialNumber = $serialNumber;
    $this->itemName = $itemName;
    $this->itemQuantity = $itemQuantity;
    $this->itemPrice = $itemPrice;    
    $this->boxPrice = $boxPrice;
  }

  public function getSerialNumber()
  {
    return $this->serialNumber;
  }

  public function getItemName()
  {
    return $this->itemName;
  }

  public function getItemQuantity()
  {
    return $this->itemQuantity;
  }

  public function getItemPrice()
  {
    return $this->itemPrice;
  }

  public function getBoxPrice()
  {
    return $this->boxPrice;
  }

}

$storeBoxList = [];

while (true) {
  $input = readline();
  if ($input == "end") { break; }
  $inputArr = explode(" ", $input);

  $serialNumber = $inputArr[0];
  $itemName = $inputArr[1];
  $itemQuantity = $inputArr[2];
  $itemPrice = $inputArr[3];
  $boxPrice = $itemQuantity * $itemPrice;

  $storeBox = new StoreBox($serialNumber, $itemName, $itemQuantity, $itemPrice, $boxPrice);
  $storeBoxList[] = $storeBox;
}

var_dump($storeBoxList);

?>

 

Тагове:
0
Fundamentals Module
willystyle avatar willystyle 2472 Точки
Best Answer

Тук може да ползваш usort() сортиране с твоя функция компаратор:

usort($storeBoxList, function ($a, $b) {return ($b->getboxPrice() - $a->getboxPrice());});

foreach ($storeBoxList as $storeBoxItem) {

  echo $storeBoxItem->getSerialNumber() . PHP_EOL;

  echo "-- " . $storeBoxItem->getItemName() . " - $" . number_format($storeBoxItem->getItemPrice(), 2, ".", "") . ": " . $storeBoxItem->getItemQuantity() . PHP_EOL;

  echo "-- $" . number_format($storeBoxItem->getboxPrice(), 2, ".", "") . PHP_EOL;

}

0
Knightwalker avatar Knightwalker 38 Точки

Мерси, тъкмо го stackoverflownax и реши задачата 1 към 1 с това което си написал. БТВ дали мога да те питам нещо докато си още тук, защото виждам че си доста knowledgable :D

(Това е за следващата задача. Реших я но...) Ако имам следния масив от обекти, как точно във foreach да достъпя там където пише "cars:" за да го принтирам като стринг това "Cars:"  после по долу има "trucks:". Най-вероятно в първия foreach? но но нещо не ми се получи.

array(1) {
  [0]=>
  object(Catalog)#3 (2) {
    ["cars":"Catalog":private]=>
    array(2) {
      [0]=>
      object(Car)#2 (4) {
        ["type":"Car":private]=>
        string(3) "Car"
        ["brand":"Car":private]=>
        string(7) "Peugeot"
        ["model":"Car":private]=>
        string(3) "307"
        ["power":"Car":private]=>
        string(3) "109"
      }
      [1]=>
      object(Car)#1 (4) {
        ["type":"Car":private]=>
        string(3) "Car"
        ["brand":"Car":private]=>
        string(6) "Subaru"
        ["model":"Car":private]=>
        string(7) "Impreza"
        ["power":"Car":private]=>
        string(3) "152"
      }
    }
    ["trucks":"Catalog":private]=>
    array(0) {
    }
  }
}

 

0
willystyle avatar willystyle 2472 Точки
foreach ($array as $key => $value) {

    и тук си ровиш по ключа ($key) и стойностите ($value)

}

Ако искаш да итерираш в обект, виж: http://php.net/manual/bg/language.oop5.iterations.php

Ако пропъртитата са private или protected, от външеш foreach няма да ги виждаш, ще трябва да си направиш достъп вътре в класа, както е в примера.

1
12/11/2018 23:40:31
johanni avatar johanni 5 Точки

Ето от мене едно 100/100

 

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
  class Box
    {
        public string SerialNumber { get; set; }
        public string Item { get; set; }
        public int quantity { get; set; }
        public decimal PriceBox { get; set; }
        public decimal TotalPrice { get; set; }
    }
  
    class Program
    {
        static void Main(string[] args)
        {
            List<Box> boxes = new List<Box>();

            string line = Console.ReadLine();

            while (line != "end")
            {
                string[] data = line.Split();

                string serialNumber = data[0];
                string itemName = data[1];
                int itemQuantity = int.Parse(data[2]);
                decimal itemPrice = decimal.Parse(data[3]);

                Box box = new Box();

                box.SerialNumber = serialNumber;
                box.Item = itemName;
                box.quantity = itemQuantity;
                box.PriceBox = itemPrice;
                box.TotalPrice = itemQuantity * itemPrice;

                boxes.Add(box);

                line = Console.ReadLine();

            }

            List<Box> sortedBox = boxes.OrderByDescending(boxes => boxes.TotalPrice).ToList();
            

            foreach (Box box in sortedBox)
            {
                Console.WriteLine($"{box.SerialNumber}");
                Console.WriteLine($"-- {box.Item} - ${box.PriceBox:f2}: {box.quantity}");
                Console.WriteLine($"-- ${box.TotalPrice:f2}");
            }
        }
    }
}

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.