У меня два массива. $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
и некоторые другие функции, но мне это не помогло. Любая помощь будет оценена. Заранее спасибо.
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];
}
}
Я бы предложил что-то подобное. Это немного уродливо, потому что есть петля в цикле, но это было бы самым простым способом добиться этого.
Ваш массив 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)
Предполагая, что $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);
Предполагая, что цена и количество всегда являются последними, простым подходом было бы это
foreach($arr2 as $arr) {
if(count(array_diff(array_slice($arr,0,4),$arr1))==0) {
return $arr;
}
}
array_diff
-array_diff
разницу массивов