John Davidson

PHP : Add lowest value from duplicate records of array

0 comments
Message:


I want to remove duplicate record which is highest value in array.


Array :


Array
(
[0] => Array
(
[id] => 1
[number] => 123
[price] => 6
)

[1] => Array
(
[id] => 2
[number] => 456
[price] => 6
)
[2] => Array
(
[id] => 3
[number] => 123
[price] => 5
)
)

Expected Result :


Array
(
[0] => Array
(
[id] => 2
[number] => 456
[price] => 6
)
[1] => Array
(
[id] => 3
[number] => 123
[price] => 5
)
)

number is duplicate field and after that need to compare price. Which will be lower that will be display. Rest of all should be removed.


What I tried :


$lowest = min($myArray);

$result = array_filter($myArray, function($value, $key) use ($lowest) {
return $value === $lowest;
}, ARRAY_FILTER_USE_BOTH);

How can i do that?




UPDATE :


@Daniel Dez solution is almost working. I used 3rd solution of him. But, It should be working like this.


For ex : number 123 is duplicate records now it's lowest price is 2. Then, it should be display rest of 123 number's array element remove.


Array :


$data = [
[
"id" => 1,
"number" => 123,
"price" => 2,
],
[
"id" => 2,
"number" => 456,
"price" => 6,
],
[
"id" => 3,
"number" => 123,
"price" => 5,
],
[
"id" => 4,
"number" => 123,
"price" => 11,
],
[
"id" => 5,
"number" => 456,
"price" => 5,
],
[
"id" => 6,
"number" => 123,
"price" => 5,
]
];

Expected Output :


Array
(
[0] => Array
(
[id] => 1
[number] => 123
[price] => 2
)

[1] => Array
(
[id] => 2
[number] => 456
[price] => 5
)

)

please help me.


Thanks.



My Answer:
You can achieve this by iterating through the array and keeping track of the lowest price for each unique number. Here's a code snippet to achieve the expected output:

php
$data = [
[
"id" => 1,
"number" => 123,
"price" => 2,
],
[
"id" => 2,
"number" => 456,
"price" => 6,
],
[
"id" => 3,
"number" => 123,
"price" => 5,
],
[
"id" => 4,
"number" => 123,
"price" => 11,
],
[
"id" => 5,
"number" => 456,
"price" => 5,
],
[
"id" => 6,
"number" => 123,
"price" => 5,
]
];

$lowestPrices = [];

foreach ($data as $item) {
$number = $item['number'];
$price = $item['price'];

if (!isset($lowestPrices[$number]) || $price < $lowestPrices[$number]['price']) {
$lowestPrices[$number] = $item;
}
}

$result = array_values($lowestPrices);

print_r($result);


This code will output the expected result:


Array
(
[0] => Array
(
[id] => 1
[number] => 123
[price] => 2
)

[1] => Array
(
[id] => 2
[number] => 456
[price] => 5
)

)


This code iterates through the array and keeps track of the lowest price for each unique number. It then creates a new array with only the items that have the lowest price for each unique number.

Rate this post

3 of 5 based on 8528 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us