简体   繁体   English

从数组中查找唯一值

[英]Find Unique Value from a array

I have a Multidimensional array, I need to find if array have same value of 'brand' attribute then return its id. 我有一个多维数组,我需要查找数组是否具有相同的'brand'属性值,然后返回其ID。

I tried via some array functions but it didn't work. 我尝试通过一些数组函数,但是没有用。
What I Tried: 我试过的

1) 1)

$backwards = array_reverse($attribute);
            echo '<pre>';
            $last_item = NULL;
            $i = 0;
            foreach ($backwards as $current_item) {
                if ($last_item === $current_item[$i]['value']) {
                    echo '<pre>'; print_r($current_item[$i]['value']);
                }
                $last_item = $current_item[$i]['value'];
                echo '<pre>'; print_r($last_item);
                $i++;
            }

2) 2)

$j = 1;
            $i = 0;
            foreach ($attributeValues as $attributeData) {
                foreach ($attribute as $value) {
                    if($value[$i]['value'] == $value[$j]['value']) {
                        echo '<pre>'; print_r($value); die(); 
                    }
                    $j++;
                }
            }

All my solution's not worked, please help. 我所有的解决方案均无效,请提供帮助。

[0] => Array
    (
        [0] => Array
            (
                [name] => brand
                [value] => 54
                [id] => 5251
                [price] => 15000.0000
            )

        [1] => Array
            (
                [name] => model
                [value] => 1200
                [id] => 5251
                [price] => 15000.0000
            )

    )

[1] => Array
    (
        [0] => Array
            (
                [name] => brand
                [value] => 54
                [id] => 5250
                [price] => 15000.0000
            )

        [1] => Array
            (
                [name] => model
                [value] => 1200
                [id] => 5250
                [price] => 12000.0000
            )

    )
[2] => Array
    (
        [0] => Array
            (
                [name] => brand
                [value] => 89
                [id] => 518
                [price] => 100.0000
            )

        [1] => Array
            (
                [name] => model
                [value] => 12
                [id] => 518
                [price] => 100
            )
    )

If [name]=>brand and [name]=>model value's of first array is same as second array's value then return [id] . 如果第一个数组的[name]=>brand[name]=>model值与第二个数组的值相同,则返回[id]

you can use foreach and iterate through the array 您可以使用foreach并遍历数组

$res = [];
foreach($arr as $k => $v){
  if($v[0]['name'] == $v[1]['name'])
    $res[$v[0]['name']] = $v[0]['id'];
}

If you want to match the index value try this 如果要匹配索引value尝试此

foreach($arr as $k => $v){
  if($v[0]['value'] == $v[1]['value'])
    $res[] = $v[0]['id'];
}

Working example 工作实例

You need two for loop. 您需要两个for循环。

$result =[];
foreach ($arr as $key => $value) {
    foreach($value as $v){
        $result[$v['name']][] = $v['id'];      
    }
}
$result = array_map("array_unique", $result); // to make it unique
print_r($result);
// if you want to check ids for brand
//print_r($result['brand']);

Output : 输出

Array
(
    [brand] => Array
        (
            [0] => 5251
            [1] => 5250
            [3] => 518
        )

    [model] => Array
        (
            [0] => 5251
            [1] => 518
        )

)

Demo . 演示

EDIT 编辑
Then you can group it by name and value of it 然后您可以按名称和值将其分组

$result =[];
foreach ($arr as $key => $value) {
    foreach($value as $v){
        $result[$v['name']."|".$v['value']][] = $v['id'];      
    }
}
$result = array_map("array_unique", $result);
print_r($result);die;

Demo . 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM