2015-10-14 3 views
0

первый массив как этотКак сравнить и отфильтровать 2 массива

$zones_array1 = array(); 
     $zones_array1[] = array('id' => 'Alabama', 'text' => 'Alabama'); 
     $zones_array1[] = array('id' => 'Alaska', 'text' => 'Alaska'); 
     $zones_array1[] = array('id' => 'Arizona', 'text' => 'Arizona'); 
     $zones_array1[] = array('id' => 'Arkansas', 'text' => 'Arkansas'); 

второго массива, как этот

$zones_array2 = array(); 
     $zones_array2[] = array('id' => 'Alaska', 'text' => 'Alaska'); 
     $zones_array2[] = array('id' => 'Arizona', 'text' => 'Arizona'); 

я хочу фильтровать эти два массива, и я хочу, конечный результат в виде массива, как этот первый массив как этот

$zones_array3 = array(); 
     $zones_array3[] = array('id' => 'Alabama', 'text' => 'Alabama'); 
     $zones_array3[] = array('id' => 'Arkansas', 'text' => 'Arkansas'); 

пожалуйста, помогите мне

+1

Try итерацию по array1, используя условный основанный на in_array. См. Http://php.net/manual/en/ref.array.php –

+0

, если вы можете объяснить, как это сделать – sudhara

ответ

0

Вы можете использовать php 'in_array', чтобы проверить, что элемент существует внутри другого массива или нет. В этом случае массив является многомерным, поэтому он хранит все идентификаторы внутри вновь созданного массива, а затем сравнивает данный массив с этим.

$check_array = array(); 
foreach ($zones_array1 as $arr1){ 
     $check_array[] = $arr1['id']; 
} 

$zones_array3 = array(); 

foreach ($zones_array2 as $arr2){ 
if (!in_array($arr2['id'], $check_array)) 
    { 
     $zones_array3[] = $arr2; 
    } 
} 

echo '<pre>'; 
print_r($zones_array3); 
+0

Хотя этот код может ответить на вопрос, предоставляя дополнительное объяснение относительно * how * и/или * why *, оно решает проблема сделает его более полезным для будущих посетителей. – Keale

+0

не работает это для oscommerce – sudhara

+0

@sudhara, whats error? –

-1

Пожалуйста, попробуйте это

array_push($zones_array1,$zones_array2); 
print_r(array_unique($zones_array1)); 

Я не уверен.

+0

Вы даже попробовали это? – someOne

+1

попробовал однажды не уверен. –

+0

Ну, тогда, убедитесь! независимо от сгенерированных предупреждений, он не будет производить то, что хочет OP! – someOne

0

Просто попробовать:

function udiffCompare($a, $b) 
{ 
    return $a['id'] == $b['id'] ? 0 : -1; 
} 

$arrdiff = array_udiff($zones_array1, $zones_array2, 'udiffCompare'); 

echo '<pre>'; 
print_r($arrdiff); 

array_udiff() сравнивает каждый элемент первого массива-аргумент против всех элементов второго массива-аргумента, используя предоставленную функцию обратного вызова. Если обратный вызов возвращает ноль для любого из сравнений, тогда элемент массива в первом аргументе не будет присутствовать в возвращенном массиве функции.

0

Вы попробовать:

function unique_multidim_array($array, $key){ 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array(); 

    foreach($array as $val){ 
     if(!in_array($val[$key],$key_array)){ 
      $key_array[$i] = $val[$key]; 
      $temp_array[$i] = $val; 
     } 
     $i++; 
    } 
    return $temp_array; 
} 

$zones_array1 = array_merge($zones_array2, $zones_array3); 
$zones_array1 = unique_multidim_array($zones_array1, 'id'); 
print_r($zones_array1); 
Смежные вопросы