2

I have an array like this:

Array(
    [0] => Array(
            [id] => 1
            [name] => name1
            [table] => warehouse)
    [1] => Array(
            [id] => 2
            [name] => name2
            [table] => warehouse)
    [2] => Array(
            [id] => 3
            [name] => name1
            [table] => kitchen)
    [3] => Array(
            [id] => 4
            [name] => name5
            [table] => kitchen)
)

and I want to get this result. array_unique will not work, because there is only one value same and I want to sort with only name. id and tables can be same.

Array(
    [0] => Array(
            [id] => 1
            [name] => name1
            [table] => warehouse)
    [1] => Array(
            [id] => 2
            [name] => name2
            [table] => warehouse)
    [3] => Array(
            [id] => 4
            [name] => name5
            [table] => kitchen))
Levan Lotuashvili
  • 841
  • 10
  • 13
  • init a new array, go through your original array, check if each element's name is in the new array, if not add, else move to next element. – taesu Jan 25 '15 at 18:07

5 Answers5

5

Try this

$data = Array(
    [0] => Array(
            [id] => 1
            [name] => name1
            [table] => warehouse)
    [1] => Array(
            [id] => 2
            [name] => name2
            [table] => warehouse)
    [2] => Array(
            [id] => 3
            [name] => name1
            [table] => kitchen)
    [3] => Array(
            [id] => 4
            [name] => name5
            [table] => kitchen)
);

$record = array();
$name = array();
foreach($data as $key=>$value){
   if(!in_array($value['name'], $name)){
      $name[] = $value['name'];
      $record[$key] = $value;
   }

}
print_r($record);
Bhavya Shaktawat
  • 2,504
  • 1
  • 13
  • 11
  • Here you can also find an answer to your question [link](http://stackoverflow.com/a/28129137/4375900). I have answered the same question yesterday. – stefan Jan 25 '15 at 19:23
2

If you won't using vanilla-PHP, you can do this using ouzo-goodies library:

$uniqueByName = Arrays::uniqueBy($array, 'name');
Piotr Olaszewski
  • 6,017
  • 5
  • 38
  • 65
1

How about this?
It will have only unique records.
If there are several similar records, the last one will prevail.

$new = [];
foreach($array as $a) $new[$a['name']] = $a;
print_r($new);

You may have to array_reverse() the array first, if you want only the occurence to prevail instead.

Oleg Dubas
  • 2,320
  • 1
  • 10
  • 24
1

You can use ArrayHelper bundled with Yii framework. $array = array_values(ArrayHelper::index($array, 'name'));

Roger
  • 973
  • 10
  • 15
0

with 2 foreach statement you can do it so..

let name something...

$arr1 = array("shayan","ali","shayan","maziar","pezhman","ali");
$arr2 = array();

foreach($arr1 as $element1)
{
foreach($arr1 as $element2)
{
if ($element1 != $element2 && !in_array($element1,$arr2))
{
array_push($arr2,$element1);
}
}
}
print_r($arr2);

hope it helps <3

sci3nt15t
  • 93
  • 1
  • 8