Привет, Как найти количество повторяющихся элементов в multidimensional array
?
У меня есть такой массив
Array ( [0] => Array ( [lid] => 192 [lname] => sdsss ) [1] => Array ( [lid] => 202 [lname] => testing ) [2] => Array ( [lid] => 192 [lname] => sdsss ) [3] => Array ( [lid] => 202 [lname] => testing ) )
Как найти количество элементов?
т.е. количество записей с идентификатором 192
, 202
т. д.
Вы можете принять этот трюк; сопоставьте каждый элемент массива (который является самим массивом) с его соответствующим членом ['lid']
а затем используйте array_count_value()
чтобы выполнить подсчет для вас.
array_count_values(array_map(function($item) { return $item['lid']; }, $arr);
Кроме того, это однострочный, что добавляет статус элитного хакера.
Начиная с версии 5.5 вы можете сократить ее до:
array_count_values(array_column($arr, 'lid'));
foreach ($array as $value) { $numbers[$value[lid]]++; } foreach ($numbers as $key => $value) { echo 'numbers of '.$key.' equal '.$value.'<br/>'; }
Следующий код будет считать дубликат элемента массива. Пожалуйста, просмотрите его и попробуйте этот код.
$arrayChars=array("green","red","yellow","green","red","yellow","green"); $arrLength=count($arrayChars); $elementCount=array(); for($i=0;$i<$arrLength-1;$i++) { $key=$arrayChars[$i]; if($elementCount[$key]>=1) { $elementCount[$key]++; } else { $elementCount[$key]=1; } } echo "<pre>"; print_r($elementCount);
ВЫВОД:
Массив ([зеленый] => 3 [красный] => 2 [желтый] => 2)
Вы также можете просмотреть похожие вопросы с обработкой массивов по следующей ссылке: http://solvemyquest.com/count-duplicant-element-array-php-without-using-built-function/
Следующий код получит подсчеты для всех из них – что-то> 1 в конце будет повторяться.
<?php $lidCount = array(); $lnameCount = array(); foreach ($yourArray as $arr) { if (isset($lidCount[$arr['lid']])) { $lidCount[$arr['lid']]++; } else { $lidCount[$arr['lid']] = 1; } if (isset($lnameCount [$arr['lname']])) { $lnameCount [$arr['lname']]++; } else { $lnameCount [$arr['lname']] = 1; } }
$array = array('192', '202', '192', '202'); print_r(array_count_values($array));
Если вы можете обнаружить дубликат с lid
чем
foreach($yourarray as $val) $arResult[$val[lid]] += 1;
а затем просто подсчет эхо значения, которое вы хотите, например
echo $arResult[192];
$orders = array( array( 'lid' => '', 'lname' => '', )).... $foundIds = array(); foreach ( $orders as $index => $order ) { if ( isset( $foundIds[$order['lid']] ) ) { $orders[$index]['is_dupe'] = true; $orders[$foundIds[$order['lid']]]['is_dupe'] = true; } else { $orders[$index]['is_dupe'] = false; } $foundIds[$order['lid']] = $index; }
Попробуйте этот код:
$array_count = array(); foreach ($array as $arr) : if (in_array($arr, $array_count)) { foreach ($array_count as $key => $count) : if ($key == $arr) { $array_count[$key]++; break; } endforeach; } else { $array_count[$arr] = 1; } endforeach;
Проверьте с помощью функции in_array()
.