Учитывая два ассоциативных массива:
$fruits = array ( "d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple" ); $fruits2 = array ( "e" => "lemon", "f" => "apple", "g" => "melon", "h" => "apple" );
Я хотел бы сделать что-то вроде:
for ( $n = count($fruits), $i = 0; $i < $n; $i++) { $test = (bool) $fruits[$i] == $fruits2[$i]; }
Это не может работать, поскольку я использую ассоциативный массив. Каким будет лучший способ достичь этого? (Этот цикл будет интенсивным, поэтому я хотел бы сохранить его как можно более легким)
EDIT, чтобы дать более подробную информацию о том, что я пытаюсь сделать:
Вот лучший пример того, чего я пытаюсь достичь:
$array = array ( 1,2,3,4,3,2 ); $array2 = array ( 9,6,3,4,3,2 ); $counts = array_count_values( $words ); $counts2 = array_count_values( $words2 );
Учитывая вышеприведенные массивы, мне нужно вычислить, какой массив является наивысшим количеством повторяющихся целых чисел. Представьте себе игру в покер, сравнив две руки, каждая из которых содержит дубликаты карт, как оценить, какой набор дубликатов (будь то двойной, тройной или четверной), как наивысшее значение.
Используйте функцию array array_values (array $ input) и сравнивайте их.
$value1=array_values($fruits); $value2=array_values($fruits2); for ( $i = 0; $i < count($value1); $i++) { $test[] = $value1[$i] == $value2[$i] ? TRUE : FLASE; }
Получил это так:
$n = count($fruits); for ( $i = 0; $i < $n; $i++) { $cur_vals_1 = each ($fruits); $cur_vals_2 = each ($fruits2); $sum1 += $cur_vals_1['key'] * $cur_vals_1['value']; ... }
Возможно, вы преследуете неправильное решение. Чтобы найти самый высокий дубликат в массиве, я бы использовал это (синтаксис PHP 5.3+):
max(array_keys(array_filter(array_count_values($array), function ($i) { return $i >= 2; })))
Сделайте это для обоих массивов и сравните, какой результат выше. Попытка сравнить друг с другом в одно и то же время слишком запутана.
Вам не нужен тройной оператор.
Кроме того, будьте осторожны с count (), поскольку он будет терпеть неудачу, если ваш массив равен NULL.
Они также должны быть одинаковой длины, или вы получите сообщение об ошибке.
if( is_array($value1) && is_array($value2) && count($value1)==count($value2) ) { for ( $i = 0; $i < count($value1); $i++) { $test[] = ($value1[$i] == $value2[$i]); } }