从数组中查找唯一值

时间:2019-06-20 07:19:05

标签: php arrays match magento2

我有一个多维数组,我需要确定数组是否具有相同的'brand'属性值,然后返回其ID。

我尝试了一些数组函数,但是没有用。
我尝试过的事情:

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)

$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++;
                }
            }

我所有的解决方案均无效,请帮忙。

[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
            )
    )

如果第一个数组的[name]=>brand[name]=>model的值与第二个数组的值相同,则返回[id]

2 个答案:

答案 0 :(得分:1)

您可以使用foreach并遍历数组

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

如果要匹配索引value,请尝试

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

Working example

答案 1 :(得分:1)

您需要两个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']);

输出

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

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

)

Demo

编辑
然后您可以按名称和值将其分组

$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