2017-02-02 6 views
0
$arr1 = array(
     array('to' => '923336088811', 'country' => 'Pakistan' , 'operator' => 'Ufone (Pak Telecom)'  , 'network_charges' => '0.5'  , 'server' => '11' ,  'methode' => 'JSON'  ,  'our_sms_id' => '235171135665'  ,  'our_sms_status_code' => '1'  ,  'action' => 'waiting'   ,  'message_status' => 'Pending'    ), 
     array('to' => '923456812536', 'country' => 'Pakistan' , 'operator' => 'Ufone (Pak Telecom)'  , 'network_charges' => '0.5'  , 'server' => '11' ,  'methode' => 'JSON'  ,  'our_sms_id' => '235171135665'  ,  'our_sms_status_code' => '1'  ,  'action' => 'waiting'   ,  'message_status' => 'Pending'    ), 
     array('to' => '923008090100', 'country' => 'Pakistan' , 'operator' => 'Ufone (Pak Telecom)'  , 'network_charges' => '0.5'  , 'server' => '11' ,  'methode' => 'JSON'  ,  'our_sms_id' => '235171135665'  ,  'our_sms_status_code' => '1'  ,  'action' => 'waiting'   ,  'message_status' => 'Pending'    ), 
     ); 



$arr2 = array(
     array('to' => '923336088811', 'country' => 'Pakistan' , 'operator' => 'ZONG'  , 'network_charges' => '10'  , 'server' => '18' ,  'methode' => 'JSON'  ,  'our_sms_id' => '235171135665'  ,  'our_sms_status_code' => '1'  ,  'action' => 'waiting'   ,  'message_status' => 'Pending'    ), 
     array('to' => '923008090100', 'country' => 'Pakistan' , 'operator' => 'New'  , 'network_charges' => '10'  , 'server' => '18' ,  'methode' => 'JSON'  ,  'our_sms_id' => '235171135665'  ,  'our_sms_status_code' => '1'  ,  'action' => 'waiting'    ,  'message_status' => 'Pending'    ), 

     ); 


$ported_numbers = array_uintersect($arr2, $arr1, 'compareDeepValue'); 
$check = array_diff_key($arr1, $ported_numbers); 
$result = array_merge($ported_numbers, $check); 

print_r($result); 




function compareDeepValue($val1, $val2){ 
return strcmp($val1['to'], $val2['to']); 
} 

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Как две следующие позиции соответствие с $ arr1 'к' => '923336088811' 'до' => '923008090100'Сравнение динамических массивов php

Потребность Окончательный ответ Как

Array 
(
    [0] => Array 
     (
      [to] => 923336088811 
      [country] => Pakistan 
      [operator] => ZONG 
      [network_charges] => 10 
      [server] => 18 
      [methode] => JSON 
      [our_sms_id] => 1 
      [our_sms_status_code] => 4 
      [action] => waiting 
      [message_status] => Pending 
     ) 

    [1] => Array 
     (
      [to] => 923456812536 
      [country] => Pakistan 
      [operator] => Ufone (Pak Telecom) 
      [network_charges] => 0.5 
      [server] => 11 
      [methode] => JSON 
      [our_sms_id] => 2 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 

    [2] => Array 
     (
      [to] => 923008090100 
      [country] => Pakistan 
      [operator] => new 
      [network_charges] => 10 
      [server] => 18 
      [methode] => JSON 
      [our_sms_id] => 5 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 

) 

Необходимо заменить элементы в $ arr1 с по отношению к ключу «к» и нужно показывать вывод без использования какой-либо петлевой структуры

+0

Почему вы не можете использовать петлю? –

+0

Структура цикла потребляет больше ресурсов сервера. –

+0

Вы, вероятно, обнаружите, что, если вы не имеете дело с огромными объемами данных или делаете это очень часто, то НЕ использование цикла вызовет у вас гораздо больше боли, чем любая загрузка на сервере от их использования. –

ответ

0

Вы были так близко. Хорошая новость: есть только одна строка для исправления. $check=array_udiff($arr1,$arr2,'compareDeepValue');

Однако, я полностью сломать свой код, чтобы будущие читатели могут увидеть, что происходит с array_uintersect(), array_udiff() и compareDeepValue().

function compareDeepValue($val1, $val2){ 
    return strcmp($val1['to'],$val2['to']); 
} 
$ported_numbers=array_uintersect($arr2,$arr1,'compareDeepValue'); 
/* Array(
    [0] => Array(
      [to] => 923336088811 
      [country] => Pakistan 
      [operator] => ZONG 
      [network_charges] => 10 
      [server] => 18 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 
    [1] => Array(
      [to] => 923008090100 
      [country] => Pakistan 
      [operator] => New 
      [network_charges] => 10 
      [server] => 18 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 
    ) */ 
// So far, so good. 

// MalikIrfan's 
// $check=array_diff_key($arr1,$ported_numbers); 
/* Array(
    [2] => Array(
      [to] => 923008090100 
      [country] => Pakistan 
      [operator] => Ufone (Pak Telecom) 
      [network_charges] => 0.5 
      [server] => 11 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 
    ) */ 
// this is not the desired collection of unmatched subarrays 
// replace MalikIrfan's $check line with my $check line 

$check=array_udiff($arr1,$arr2,'compareDeepValue'); 
// Returns array of unchanged ($arr1 only) subarrays 
/* Array(
    [1] => Array 
     (
      [to] => 923456812536 
      [country] => Pakistan 
      [operator] => Ufone (Pak Telecom) 
      [network_charges] => 0.5 
      [server] => 11 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 
    ) */ 

$result=array_merge($ported_numbers,$check); 
// The $result subarrays now ordered with changed rows first, unchanged second. 
// This subarray order does not match the desired Final Response, but shouldn't matter. 
// Also, I assume the our_sms_id values in Final Response were typos. 
/* Array(
    [0] => Array(
      [to] => 923336088811 
      [country] => Pakistan 
      [operator] => ZONG 
      [network_charges] => 10 
      [server] => 18 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ), 
    [1] => Array(
      [to] => 923008090100 
      [country] => Pakistan 
      [operator] => New 
      [network_charges] => 10 
      [server] => 18 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ), 
    [2] => Array(
      [to] => 923456812536 
      [country] => Pakistan 
      [operator] => Ufone (Pak Telecom) 
      [network_charges] => 0.5 
      [server] => 11 
      [methode] => JSON 
      [our_sms_id] => 235171135665 
      [our_sms_status_code] => 1 
      [action] => waiting 
      [message_status] => Pending 
     ) 
    ) */ 
+0

@MalikIrfan Если мой ответ устраняет вашу проблему, пожалуйста, назначьте ему зеленый галочку (и, возможно, взлет за полезность). В противном случае, пожалуйста, объясните, есть ли что-то еще. – mickmackusa

Смежные вопросы