Array cu obiecte filtrat cu array

Am un array de forma:

arr1 = ['tip1', 'tip2', 'tip3', 'tip4', 'tip5']

si un array de forma:

arr2 = 
Array
(
[0] => stdClass Object
        (
            [denumireTip] => tip1
            [valoare] => 8
        )

    [1] => stdClass Object
        (
            [denumireTip] => tip3
            [valoare] => 14
        )

    [2] => stdClass Object
        (
            [denumireTip] => tip4
            [valoare] => 2
        )
)

Incerc sa returnez un arr3 de forma arr2 care sa contina toate elementele arr1.
Unde se regasesc in arr2->denumireTip valorile aferente elementeleor din arr1 sa le returneze, unde nu sa returneze 0.
In genul:

[0]  => stdClass Object ([denumireTip] => tip1, [valoare] => 8)
[1]  => stdClass Object ([denumireTip] => tip2, [valoare] => 0)
[2]  => stdClass Object ([denumireTip] => tip3, [valoare] => 14)
[3]  => stdClass Object ([denumireTip] => tip4, [valoare] => 2)
[4]  => stdClass Object ([denumireTip] => tip5, [valoare] => 0)

Pe server rulez php 5.6, si laravel 5.4

Multumesc!

Poti vedea rezolvarea aici se bazeaza pe faptul ca ambele array-uri nu au dubluri.

function filterObject(array $strings, stdClass $objects) {

    $flippedStrings = array_flip($strings);
    return array_filter($objects,  function ($element) use ($flippedStrings) { return array_key_exists($element->denumireTip, $flippedStrings); })

}
2 Likes

Daca intentionezi sa folosesti ce-am pus eu acolo, vezi ca e posibil sa ai nevoie de niste error handling.
Frumos ar fi sa nu ai stdClass si sa iti faci propria clasa de DTO si sa folosesti un contract pe care sa poti conta. De exemplu, in codul meu contez pe faptul ca obiectul tau are denumireTip. Civilizat ar fi sa ai o interfata sau ceva sa asiguri consistenta datelor.