This is my updated question. I have an array of objects like below:
JavaScript
x
array:113 [
0 => DataEntity {#1024
-manufacturer: "Test1"
-colour: "polar-silber"
-design: "Bavaro"
-diameter: 17
}
1 => DataEntity {#1524
-manufacturer: "Test1"
-colour: "polar-silber"
-design: "Bavaro"
-diameter: 18
}
2 => DataEntity {#1724
-manufacturer: "Test2"
-colour: "polar-silber"
-design: "Drive"
-diameter: 17
}
I have to make a comma-seperated diameter based on the common manufacturer, colour & design.
My final output should be like this:
JavaScript
array:5 [
0 => DataEntity {#1024
-manufacturer: "Test1"
-colour: "polar-silber"
-design: "Bavaro"
-diameter: "17, 18"
}
1 => DataEntity {#1724
-manufacturer: "Test2"
-colour: "polar-silber"
-design: "Drive"
-diameter: "17"
}
What I have tried so far is:
JavaScript
$manufacturer = $wheel->getManufacturer();
$design = $wheel->getDesign();
$colour = $wheel->getColour();
$key = $manufacturer. "_". $design. "_". $colour;
$wheelsArray[$key] = $wheel;
if (array_key_exists($key, $wheelsArray)) {
$dia = $wheelsArray[$key]->getDiameter();
$dia .= ', ' . $wheel->getDiameter();
$wheelsArray[$key]->setDiameter($dia);
}
Here, what I get is diameter: “17, 17” instead of “17, 18”
Can anybody help me what mistake I have done?
Advertisement
Answer
You could loop through the array and set the manufacturer prop as the key of a new array:
https://paiza.io/projects/_ZzfxgMJjKIJIZAGSILmQA
JavaScript
<?php
$de1 = new stdClass();
$de1->manufacturer = "Test1";
$de1->colour = "polar-silber";
$de1->design = "Bavaro";
$de1->diameter = 17;
$de2 = new stdClass();
$de2->manufacturer = "Test1";
$de2->colour = "polar-silber";
$de2->design = "Bavaro";
$de2->diameter = 18;
$de3 = new stdClass();
$de3->manufacturer = "Test2";
$de3->colour = "polar-silber";
$de3->design = "Drive";
$de3->diameter = 17;
$arr = [$de1,$de2,$de3];
$resArr = [];
foreach($arr as $key => $val){
if(isset($resArr[$val->manufacturer])){
$resArr[$val->manufacturer]->diameter .= ", ".$val->diameter;
} else{
$resArr[$val->manufacturer] = $val;
}
}
print_r($resArr);
?>
Result:
JavaScript
Array
(
[Test1] => stdClass Object
(
[manufacturer] => Test1
[colour] => polar-silber
[design] => Bavaro
[diameter] => 17, 18
)
[Test2] => stdClass Object
(
[manufacturer] => Test2
[colour] => polar-silber
[design] => Drive
[diameter] => 17
)
)