Как сравнить значения массивов и в случае совпадения выполнить запись в проверяемый массив php?

383
03 октября 2017, 06:41

Есть два многомерных массива, arr1 и arr2. Необходимо проверить, есть ли совпадения по значению arr1[$i][3] с arr2[$i][0], если есть дописать в конец массива arr1[$i] значение arr2[$i][1].

<?php
$arr1 = array( 
    array('a', 'b', 'c', '2231'),
    array('a' , 'b' , 'c' , '2344')
    );
$arr2 = array(
    array('2231', '658'),
    array('2456' . '0')
    );
$size_arr2 = count($arr2);

$size = count($arr1);
for ($i = 0; $i <= $size; $i++) {
    $arr1[$i][] = 'some';
} 

print_r($arr1);

// Первый массив в который дописывмем значение из второго массива если есть совпадение по [$i][3]

array (

[0] => Array 
(
    [0] => google / cpc 
    [1] => Paris city
    [2] => Oneclick_Order_0983451
    [3] => 456894 // значение для сравения 
    [4] => 0 
)
[1] => Array
(
    [0] => google / cpc 
    [1] => Kyiv city
    [2] => Oneclick_Order_0983421
    [3] => 456891  // значение для сравения 
    [4] => 0 
)
[2] => Array
(
    [0] => google / cpc 
    [1] => Kyiv city
    [2] => Oneclick_Order_0483421 
    [3] => 456892 // значение для сравения 
    [4] => 0 
)

);

// Второй массив со стоимостью

array (

[0] => Array 
(
    [0] => 456894 // значение для сравения 
    [1] => 152.45 // значение которое записываем 
)
[1] => Array
(
    [0] => 657585 
    [1] => 0
)
[2] => Array
(
    [0] => 655685 
    [1] => 845.69
)

)

На выходе получаем первый массив с заполеными ключами из второго.

Answer 1

Если требуется сранивнить каждый с каждым, а не только i-тые, то как вариант:

$tmp = array_column($arr2, 1, 0);
foreach($arr1 as &$v){
     if(array_key_exists($v[3], $tmp)){
         $v[] = $tmp[$v[3]];
     }
}

в целом цикл можно заменить на array_walk, но смысла нет, короче не станет

Answer 2

вы берете первый элемент из $arr1 и сравниваете с первым из $arr2. Потом второй из arr1, и второй arr2. А надо взять первый элемент первого, и проверит на совпадение все элементы второго. То есть у вас arr1[i] и arr2[i], а надо arr2[j]. Фактически в вопросе зря использованы одинаковые индексы $i

for ($i = 0; $i < sizeof($arr1); $i++) {
    foreach ($arr2 as $k => $v) {
        if ($arr1[$i][3] == $v[0]) {
            $arr1[$i][] = $v[1];
            break;
        }
    }
}
READ ALSO
Узнать адрес отправки формы

Узнать адрес отправки формы

Возможно ли как-то узнать email адрес, на который отправляются заполненные данные? http://3206161ru/services/zakaz-dokumenta/zakaz-dokumenta/

229
form post через ajax

form post через ajax

С ajax знаком ужасно, помогите разобратьсяЕсть форма:

260
подключение liqpay к Yii2

подключение liqpay к Yii2

Всем привет, не могу понять как и с чего начать подключение liqpay к Yii2 (после регистрации в liqpay) и выполнения команды:

279
Php обработка label и input

Php обработка label и input

Чекается только один,как сделать что бы все обрабатывались?

172