Is er een manier om de sleutel van twee arrays met elkaar te vergelijken en als die sleutels gelijk zijn, wijs dan de waarden van de eerste array toe aan de klassenobjecten?

Ik heb twee arrays. De eerste bevat een id, gebruikersnaam en wachtwoord uit de database en het ziet er ongeveer zo uit:

Array ( [id] => 3 [username] => Scott [password] => new )

De tweede array is

get_class_vars();

en uiteraard bevat alle klassen vars die id zijn, gebruikersnaam, etc ..

Hoe kan ik het vergelijken van de sleutels van beide arrays en vervolgens, als de sleutels hetzelfde zijn, bijvoorbeeld gebruikersnaam = gebruikersnaam, hoe kan ik de waarden van de gebruikersnaam toewijzen aan de klasse-eigenschap gebruikersnaam? het is vermeldenswaard dat ik de klasse al heb geïnstantieerd en de methoden aanroep van test.php:

// authenticate returns user info from the db 
$user = new User();
$find = $user->authenticate($username, $password);
$user->instantiate($find)//this is the method that I need to create
                         //in user.php to assign the user properties

Hopelijk is dit logisch. Ik probeer al uren een oplossing te bedenken. Laat het me weten als je verduidelijking nodig hebt.

1

3 antwoord

$common_keys = array_intersect(array_keys($array), array_keys(get_class_vars($object));
foreach($common_keys as $key) $object->$key = $array[$key];
2
toegevoegd
Niet helemaal. get_object_vars ($ this) geeft ook toegang tot beschermde en privévariabelen (vanwege het bereik waarin u $ this gebruikt). Ik zou willen voorstellen om een ​​data-array te behouden en in plaats daarvan getter/setters te gebruiken. Zie PHP's magische methode docs voor meer info. php.net/manual/en/language.oop5.magic.php
toegevoegd de auteur Kenaniah, de bron
Dit ziet eruit als een winnaar. Als deze methode zich in de klasse bevond, zou ik voor de get class vars-parameter $ $ -voorwerp met $ dit vervangen?
toegevoegd de auteur Scott, de bron

Probeer dit:

foreach(get_class_vars() as $key->$value)
  $array[$key] = $value;

Dit krijgt de sleutel uit get_class_vars() en stelt die waarde in $ array (je andere array) in op $ value .

1
toegevoegd

PHP ondersteunt het opslaan van variabelen- en functienamen in andere variabelen. Gebruikend dat, zou u over alle sleutels van uw serie itereren, controleren of de sleutel als attribuut van uw Gebruiker bestaat, en als dat zo is, vervang de waarde in het voorwerp door die van uw serie:

foreach ($array as $key => $value) {
    if (isset($user->$key)) {
        $user->$key = $value;
    }
}

So for Array ( [username] => JohnSmith ) it will check isset($user->username) and then assign $user->username = 'JohnSmith'.

1
toegevoegd