-1

одномерный массивпересекающихся одно- и многомерный массив в PHP

$arr1 = array(3) { 
    ["Gold"]=> "170" 
    ["Diamond"]=> "301" 
    ["Platinum"]=> "302" 
} 

многомерный массив

$arr2 = array(3) { 

    [0]=> 
    array(2) { 
    ["ID"]=> "p103" 
    ["PID"]=> "301" 
    } 

    [1]=> 
    array(2) { 
    ["ID"]=> "p104" 
    ["PID"]=> "302" 
    } 

    [2]=> 
    array(2) { 
    ["ID"]=> "p105" 
    ["PID"]=> "300" 
    } 
} 

И пересекающиеся может быть,

array(2) { 

    [0]=> 
    array(2) { 
    ["ID"]=> "301" 
    ["PID"]=> "Diamond" 
    } 

    [1]=> 
    array(2) { 
    ["ID"]=> "302" 
    ["PID"]=> "Platinum" 
    } 
} 

Я попытался с помощью PHP array_intersect(), $Data = array_intersect_assoc($arr1,$arr2); , но чего-то не хватало. Любые предложения и помощь могут быть оценены. Спасибо

+0

Можем ли мы увидеть вашу попытку с помощью 'array_intersect()'? – halfer

+0

@halfer pls см. Отредактированный вопрос. –

ответ

1

Вы можете просто выполнить цикл и присвоить соответствующее значение полю ПИД.

$array1 = array(
    "Gold" => "170", 
    "Diamond" => "301", 
    "Platinum" => "302" 
); 

$array2 = array(
    array(
    "ID" => "p103", 
    "PID" => "301" 
    ), 
    array(
    "ID" => "p104", 
    "PID" => "302" 
), 
    array(
    "ID" => "p105", 
    "PID" => "300" 
) 
); 

$array1 = array_flip($array1); // Flipping first array so that we can directly use the values Gold, Diamond corresponding to 301, 301 ... 

foreach ($array2 as $k => &$arr) { 
    /* 
    * If value exists in array 1 then assign it to PID 
    * Otherwise, unset this array key 
    */ 
    if (isset($array1[$arr['PID']])) { 
     $arr['PID'] = $array1[$arr['PID']]; 
    } else { 
     unset($array2[$k]); 
    } 
} 
+0

Работает отлично, спасибо и как освоить в массивах? –

+0

Вам просто нужно придерживаться основ, таких как петли, и строить свою концепцию. А также ознакомьтесь с основными функциями массива. –

+0

почему & in '& $ arr' ?. PLS объяснить –