Найти уникальное значение из массива - PullRequest
0 голосов
/ 20 июня 2019

У меня есть многомерный массив, мне нужно найти, имеет ли массив то же значение атрибута 'brand', а затем вернуть его идентификатор.

Я пытался с помощью некоторых функций массива, но это не сработало.
Что я пробовал:

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 ]

1 голос
/ 20 июня 2019

Вам нужно два для цикла.

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

)

Демо .

EDIT
Затем вы можете сгруппировать его по имени и значению

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

Демо .

1 голос
/ 20 июня 2019

вы можете использовать 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'];
}

Рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...