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))
1
  • 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. Commented Jan 25, 2015 at 18:07

5 Answers 5

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);
Sign up to request clarification or add additional context in comments.

1 Comment

Here you can also find an answer to your question link. I have answered the same question yesterday.
2

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

$uniqueByName = Arrays::uniqueBy($array, 'name');

Comments

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.

Comments

1

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

1 Comment

This would be equivalent to array_values(array_column($array, null, 'name')) which is all native PHP.
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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.