PHP :: Aufgabe #266

1 Lösung Lösung öffentlich

Steckbrief-Informationen

Anfänger - PHP von DragStar - 06.04.2020 um 08:37 Uhr
Baue ein passendes Array, welches du mit Steckbriefinfos füllst (z.B. Name, Alter, Hobbies usw).
Danach lass den User ein Hobby eingeben und gib dann den Namen der Personen ein, die dieses Hobby haben.


Lösungen:

vote_ok
von Exception (7090 Punkte) - 01.05.2020 um 10:28 Uhr
Leichte Abwandlung zur Aufgabe:
Anstelle der Namen der Personen werden in den Resultaten ihre ID bzw. ihr Index in der Konfiguration ausgegeben.
Damit ist es eindeutig welche Person gemeint ist, da z.B. der Name "John" mehrfach vorkommt.

main.php
Quellcode ausblenden PHP-Code
<?php

require_once 'Characteristics.php';

$mapping = include 'config.php';

$characteristics = new Characteristics($mapping);

var_dump($characteristics->getInformation('hobbies', 'hobby 1'));
var_dump($characteristics->getInformation('hobbies', 'hobby 2'));
var_dump($characteristics->getInformation('hobbies', 'hobby 3'));
var_dump($characteristics->getInformation('name', 'john'));


Characteristics.php
Quellcode ausblenden PHP-Code
<?php

class Characteristics 
{
  private $mapping = [];

  public function __construct(array $mapping)
  {
    $this->mapping = $mapping;
  }

  public function getInformation(string $key, string $needle): array
  {
    $results = array_column($this->mapping, $key);

    $val = [];

    foreach ($results as $index => $result) {
      if (is_array($result)) {
        if (($position = array_search($needle, $result)) !== false) {
          $val[$key][$index] = $result[$position];
        }
      } elseif ($needle === $result) {
        $val[$key][$index] = $result;
      }
    }

    return $val;
  }
}


config.php
Quellcode ausblenden PHP-Code
<?php

return [
  [
    'name' => 'john',
    'familyname' => 'doe',
    'hobbies' => [ 'hobby 1', 'hobby 2', 'hobby 3' ],
    'dateofbirth' => '1970-01-01'
  ],
  [
    'name' => 'test',
    'familyname' => 'dummy',

    'hobbies' => [ 'hobby 1', 'hobby 2' ],
    'dateofbirth' => '1970-01-02'
  ],
  [
    'name' => 'john',
    'familyname' => 'doe',
    'hobbies' => [ 'hobby 3', 'hobby 4' ],
    'dateofbirth' => '1970-01-03'
  ],
  [
    'name' => 'bli-bla',
    'familyname' => 'blubb',
    'hobbies' => [ 'hobby 3' ],
    'dateofbirth' => '1970-01-03'
  ],
  [
    'name' => 'person',
    'familyname' => 'withouthobbies',
    'hobbies' => [ ],
    'dateofbirth' => '1970-01-04'
  ],
  [
    'name' => 'person',
    'familyname' => 'withouthobbies-two',
    'dateofbirth' => '1970-01-04'
  ],
];


Konsolenausgabe:

array(1) {
["hobbies"]=>
array(2) {
[0]=>
string(7) "hobby 1"
[1]=>
string(7) "hobby 1"
}
}
array(1) {
["hobbies"]=>
array(2) {
[0]=>
string(7) "hobby 2"
[1]=>
string(7) "hobby 2"
}
}
array(1) {
["hobbies"]=>
array(3) {
[0]=>
string(7) "hobby 3"
[2]=>
string(7) "hobby 3"
[3]=>
string(7) "hobby 3"
}
}
array(1) {
["name"]=>
array(2) {
[0]=>
string(4) "john"
[2]=>
string(4) "john"
}
}
1810262

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.