filtrare array cu array cu obiecte
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
sterica
- Mesaje: 285
filtrare array cu array cu obiecte
Salutare,
Am un array de forma:
Cod: Selectaţi tot
arr1 = ['tip1', 'tip2', 'tip3', 'tip4', 'tip5']
si un array de forma:
Cod: Selectaţi tot
arr2 =
Array
(
[0] => stdClass Object
(
[denumireTip] => tip1
[valoare] => 8
)
[1] => stdClass Object
(
[denumireTip] => tip3
[valoare] => 14
)
[2] => stdClass Object
(
[denumireTip] => tip4
[valoare] => 2
)
)
Cum pot returna un array de obiecte de forma arr2 care sa contina toate denumirile de tip din arr1, iar unde nu sunt valori sa fie 0.
Multumesc!
MarPlo
Mesaje: 4343
Salut,
Incearca functia setArOb() din urmatorul exemplu (acest exemplu functioneaza pe PHP 7.2+):
Cod: Selectaţi tot
$ar_t =['tip1', 'tip2', 'tip3', 'tip4', 'tip5'];
$ar_ob =[
(object) array('denumireTip'=>'tip1', 'valoare'=>8),
(object) array('denumireTip'=>'tip3', 'valoare'=>14),
(object) array('denumireTip'=>'tip4', 'valoare'=>2)
];
function setArOb($ar_t, $ar_ob){
$re =[];
$n_t = count($ar_t);
$n_ob = count($ar_ob);
for($i=0; $i<$n_t; $i++){
$add =0;
for($i2=0; $i2<$n_ob; $i2++){
if($ar_ob[$i2]->denumireTip ==$ar_t[$i]){
$add =1;
break;
};
}
if($add ==0) $re[$i] =(object) array('denumireTip'=>$ar_t[$i], 'valoare'=>0);
else $re[$i] = $ar_ob[$i2];
}
return $re;
}
$ar_fin = setArOb($ar_t, $ar_ob);
//Check
var_dump($ar_fin);
sterica
Mesaje: 285
pe server sun nevoit sa rulez 5.6, dar am laravel 5.4. O sa incerc cu collectiile laravel poate reusesc sa ii dau de cap.
MarPlo
Mesaje: 4343
Pentru PHP 5.4+ incearca functia in varianta din urmatorul exemplu.
Cod: Selectaţi tot
// $ar_t - array simple [t1, t2, t3]
// $ar_ob - array of objects
function setArOb($ar_t, $ar_ob){
$re =[];
$n_t = count($ar_t);
$n_ob = count($ar_ob);
for($i=0; $i<$n_t; $i++){
$add =0;
for($i2=0; $i2<$n_ob; $i2++){
if($ar_ob[$i2]->denumireTip ==$ar_t[$i]){
$add =1;
break;
};
}
if($add ==0) $re[$i] =['denumireTip'=>$ar_t[$i], 'valoare'=>0];
else $re[$i] = $ar_ob[$i2];
}
return json_decode(json_encode($re));
}
$ar_t =['tip1', 'tip2', 'tip3', 'tip4', 'tip5'];
$ar_ob =[
['denumireTip'=>'tip1', 'valoare'=>8],
['denumireTip'=>'tip3', 'valoare'=>14],
['denumireTip'=>'tip4', 'valoare'=>2]
];
$ar_ob = json_decode(json_encode($ar_ob));
$ar_fin = setArOb($ar_t, $ar_ob);
//Check
var_dump($ar_fin);
sterica
Mesaje: 285
Am gasit si o varianta cu unele laravel:
Cod: Selectaţi tot
$arr2 = collect($arr1)->map(function ($item) use($arr2) {
$foo = collect($arr2)->first(function ($el) use($item) {
return $el->denumireTip == $item;
});
if (!$foo) {
return [denumireTip' => $item, 'valoare' => 0];
}
return $foo;
});
Pentru cine foloseste un laravel de versiune mai noua, in loc de first se poate folosi find.
Subiecte similare
-
Setare valori din array in select tag
JavaScript - jQuery - Ajax
Primul mesaj
Salut am un array cu orele de functionare
$data = array (
'0400' => '04:00 AM',
'0430' => '04:30 AM',
'0500' => '05:00 AM',
'0530'...
Ultimul mesaj
Testeaza urmatorul cod.
Daca ceva mai trebuie schimbat, incearca si tu sa modifici dupa cum stii, in functie de ce vrei sa obtii.
Open:...
-
Indexi valorilor din array care fac suma
PHP - MySQL - XML
Primul mesaj
Salutare,
am un array cu urmatoarele numere:
arr =
si o variabila, care poate contine numere intregi de la 50 pana 750 (750 este suma...
Ultimul mesaj
Mulțumesc mult marplo, este ceea ce îmi trebuie
-
implode(): Passing glue string after array is deprecated
PHP - MySQL - XML
Primul mesaj
Dupa 7 ani !
Acum, revazand o veche aplicatie cu codul Multiple Select Drop Down list cu tabel 3 coloane +1; am constatat ca datorita upgradarii...
Ultimul mesaj
OK ! Eu nu am inteles despre ce parametri era vorba. S-a rezolvat, multumesc pentru promptitudinea cu care mi-ai raspuns ! TOATE CELE BUNE !!!