2015-04-13 3 views
-1

я застрял в какой-то определенной проблеме, у меня есть два массива, которые являются выходом некоторых других методов:PHP сравнение 2 массивов

$firstArray = ['Johny Mao'=>'A', 'Kate Young'=>'B', 'Adam Mink'=>'C']; 
$secondArray = [ 
    ['Johny Mao','A'], 
    ['Kate Young', 'B'], 
    ['Adam Mink', 'C']  
]; 

Как я должен изменить эти два массив, чтобы два сравнение их ? Мне нужно знать, что они содержат одну и ту же информацию. Вероятно, я должен использовать методы array_diff, но сначала мне нужно изменить структуру массивов, чтобы иметь возможность их сравнивать. Надежда четко выражена :)

+0

Как? Это зависит от вас. Для этого нет ни одного ответа. Вы в основном занимаетесь поисками оппонов. –

ответ

3

Создать новый массив (или изменить второй массив) для пар ключ/значение, соответствующее первый массив

$newArray = array_combine(
    array_column($secondArray, 0), 
    array_column($secondArray, 1) 
); 

, а затем сделать ваше сравнение

+0

на самом деле не сработает. first - это имя плоского массива -> значение. второй - массив массивов значений. нет ключей. –

+0

@MarcB -что бы это не сработало? Это отображает второй массив таким образом простой массив с именами -> значениями, соответствующими первому массиву; и тогда его можно сравнить, используя что-то вроде [array_diff_assoc()] (http://www.php.net/manual/en/function.array-diff-assoc.php) –

+0

ewps. правильно. Прости. Понедельник ... даже не видел там колонны. –

0

Вы могли бы сделать что-то например, если вам не нужно проверять, не находятся ли элементы в первом массиве во втором массиве.

function areArraysEqual($firstArray, $secondArray) 
{ 
    if(count($firstArray) != count($secondArray)) 
    { 
     return false; 
    } 
    foreach($secondArray as $key => $value) 
    { 
     if(!isset($firstArray[$value[0]]) || $firstArray[$value[0]] != $value[1]) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

$firstArray = ['Johny Mao'=>'A', 'Kate Young'=>'B', 'Adam Mink'=>'C']; 
$secondArray = [ 
    ['Johny Mao','A'], 
    ['Kate Young', 'B'], 
    ['Adam Mink', 'C']  
]; 
$result = areArraysEqual($firstArray, $secondArray); 
var_dump($result); 

Edit:

Этот код ниже теперь должен принимать во внимание, если элементы первого массива не во втором массиве.

<?php 
function isValueIn2dArray(&$array, $secondDimensionKey, $value) 
{ 
    foreach($array as $key => $array2) 
    { 
     if($array2[$secondDimensionKey] == $value) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
function areArraysEqual($firstArray, $secondArray) 
{ 
    if(count($firstArray) != count($secondArray)) 
    { 
     return false; 
    } 
    foreach($secondArray as $key => $value) 
    { 
     if(!isset($firstArray[$value[0]]) || $firstArray[$value[0]] != $value[1]) 
     { 
      return false; 
     } 
    } 
    foreach($firstArray as $key => $value) 
    { 
     if(!isValueIn2dArray($secondArray, 0, $key)) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

$firstArray = ['Johny Mao'=>'A', 'Kate Young'=>'B', 'Adam Mink'=>'C']; 
$secondArray = [ 
    ['Johny Mao','A'], 
    ['Kate Young', 'B'], 
    ['Adam Mink', 'C']  
]; 
$result = areArraysEqual($firstArray, $secondArray); 
var_dump($result); 
+0

Мне нужно быть уверенным, что оба массива одинаковы. В обоих массивах всегда должно быть одинаковое количество элементов и ключ с соответствующим значением (первый массив) или двумя значениями (во втором массиве). Мне кажется, что ваше решение отлично работает. – camel

+0

Я обновил свой пост, чтобы теперь принять во внимание то, чего не хватало. – Mex

+0

Большое спасибо, я проверю это на рабочем столе. Удовлетворительно знать, что количество элементов в массивах разное, мне не нужно знать, в чем меньше предметов, поэтому выброс исключения будет прекрасным. – camel

0

Комментарии на месте. Это идея разработчиков.

Без использования array_diff или что-то:

function array_are_same($firstarray,$secondarray){ 
     foreach ($firstarray as $key => $value) { 
      if (!array_key_exists($key, $secondarray) 
       || $secondarray[$key] !== $value){ 
       return false; 
      } 
      return true; 
     } 
    } 
Смежные вопросы