Сравните два массива и получите разницу

0

У меня два массива. $arr1 выглядит следующим образом:

Array
(
    [Size] => L
    [Color] => Purple
    [Brand] => Lee
    [Fabric] => Cotton
)

и другой массив $arr2 выглядит так:

Array
(
    [0] => Array
        (
            [Color] => Purple
            [Size] => L
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 1000
            [Quantity] => 5
        )

    [1] => Array
        (
            [Color] => Pink
            [Size] => L
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 1100
            [Quantity] => 5
        )

    [2] => Array
        (
            [Color] => White
            [Size] => L
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 1200
            [Quantity] => 5
        )

    [3] => Array
        (
            [Color] => Black
            [Size] => L
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 900
            [Quantity] => 5
        )

    [4] => Array
        (
            [Color] => Purple
            [Size] => M
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 900
            [Quantity] => 5
        )

    [5] => Array
        (
            [Color] => Purple
            [Size] => S
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 900
            [Quantity] => 5
        )

    [6] => Array
        (
            [Color] => Pink
            [Size] => M
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 900
            [Quantity] => 5
        )

    [7] => Array
        (
            [Color] => Pink
            [Size] => S
            [Brand] => Lee
            [Fabric] => Cotton
            [Price] => 900
            [Quantity] => 5
        )
)

Я хочу получить цену и количество $arr2 если оба массива совпадают. Например, в этом случае $arr1 имеет 4 аргумента, $arr2's 0-м индексам $arr2's. Поэтому приведенный массив должен возвращать 1000 и 5. Я пробовал array_diff и некоторые другие функции, но мне это не помогло. Любая помощь будет оценена. Заранее спасибо.

  • 1
    use array_diff - array_diff разницу массивов
  • 0
    я пробовал это, но он дает мне все значения $ arr2 я хочу только совпадающее значение
Показать ещё 3 комментария
Теги:
arrays

4 ответа

1
    foreach($arr2 as $arrayIndex=>$element){
        $match = true;
        foreach($arr1 as $key=>$elementToMatch){
                if($element[$key] != $elementToMatch ){
                    $match = false;
                }
                if($match == false) {
                    break;
                }
            }
        if($match) {
            return $arr2[$arrayIndex];
        }
    }

Я бы предложил что-то подобное. Это немного уродливо, потому что есть петля в цикле, но это было бы самым простым способом добиться этого.

  • 0
    Вы также можете добавить все совпадения в массив, а не просто вернуть первое.
  • 0
    Спасибо за вашу помощь. Я очень ценю это.
0

Ваш массив 1: -

$Arr1=array(array
    (
        "Color" => "Pink",
        "Size" => "L",
        "Brand" => "Lee",
        "Fabric" => "Cotton",
        "Price" => "1100",
        "Quantity" => "5"
    ),array(
        "Color" => "White",
        "Size" => "L",
        "Brand" => "Lee",
        "Fabric" => "Cotton",
        "Price" => "1200",
        "Quantity" => "5"
    ),
    array(
        "Color" => "Black",
        "Size" => "L",
        "Brand" => "Lee",
        "Fabric" => "Cotton",
        "Price" => "1300",
        "Quantity" => "5"
    ),
     array(
        "Color" => "RED",
        "Size" => "L",
        "Brand" => "Lee",
        "Fabric" => "Cotton",
        "Price" => "1100",
        "Quantity" => "5"
    )

    );

Массив 2: -

$Arr2=array
(
    "Size" => "L",
    "Color" => "Purple",
    "Brand" => "Lee",
    "Fabric" => "Cotton"
);




for($x=0;$x<sizeof($Arr1);$x++){
        for($j=$x+1;$j<sizeof($Arr1);$j++){
            if($Arr1[$x]["Price"]==$Arr1[$j]["Price"] && $Arr1[$x]["Quantity"]==$Arr1[$j]["Quantity"]){
            $Arr2["Price"]=$Arr1[$j]["Price"];
            $Arr2["Quantity"]=$Arr1[$j]["Quantity"];
        } 
        }

}

    var_dump($Arr2);

Ваш результат будет

'Size' => string 'L' (length=1)
  'Color' => string 'Purple' (length=6)
  'Brand' => string 'Lee' (length=3)
  'Fabric' => string 'Cotton' (length=6)
  'Price' => string '1100' (length=4)
  'Quantity' => string '5' (length=1)
  • 0
    Спасибо за вашу помощь. Я очень ценю это.
0

Предполагая, что $arr1 является одномерным, а $arr2 является 2-мерным, вы можете использовать следующее, где результат содержит массив price и quantity для согласованных массивов. '

 function match_array($arr1, $arr2, $result){
  foreach($arr2 as $k=>$v){
    // calculate diff between array1 and array2[key]
    // if size of diff is 0 array matches
    if(sizeof(array_diff($arr1, $v)) == 0){
        // calculate the diff of array2[key] and array1
        // this will give us the price and quantity
        // push the diff into the result array
        array_push($result, array_diff($v, $arr1));
    }
  }
  print_r($result);
}
$result = array();
$result = match_array($array1, $array2, $result);
print_r($result);
  • 0
    Спасибо за вашу помощь. Я очень ценю это.
0

Предполагая, что цена и количество всегда являются последними, простым подходом было бы это

foreach($arr2 as $arr) {
    if(count(array_diff(array_slice($arr,0,4),$arr1))==0) {
        return $arr;
    }
}
  • 0
    Спасибо за вашу помощь. Я очень ценю это.
  • 0
    @ClemenSwichmann, если один из ответов сработал для вас, вы должны пометить его как ответ, чтобы другие люди знали, какой ответ вам подходит

Ещё вопросы

Сообщество Overcoder
Наверх
Меню