Искать стоимость, повторенные в array мультипространственный (PHP)

Как я могу доставать стоимость, повторенную внутри мультипространственного array в PHP? Я нашел какие-то функции, но они я не функционировали. Есть какая-то родная функция, которая бы это делала?

<?php
$array = array(array(7,18), array(12,7), array(12, 7, 13));
$result = array();


$first = $array[0];
for($i=1; $i<count($array); $i++){
 $result = array_intersect ($first, $array[$i]);
 $first = $result;
}
print_r($result);//7
?>

function array_icount_values($arr,$lower=true) { 
     $arr2=array(); 
     if(!is_array($arr['0'])){$arr=array($arr);} 
     foreach($arr as $k=> $v){ 
      foreach($v as $v2){ 
      if($lower==true) {$v2=strtolower($v2);} 
      if(!isset($arr2[$v2])){ 
          $arr2[$v2]=1; 
      }else{ 
           $arr2[$v2]++; 
           } 
    } 
    } 
    return $arr2; 
} 

$arr = array_icount_values($arry);

echo "<pre>";
print_r($arr);
exit;

Я это нашел в Stackoverflow, но я не функционирует ни одна ни другая.

2
задан 09.08.2016, 13:16
3 ответа

Если ты имеешь php5.6:

<?php
// Array multidimensional
$a = [
  [1,2,3,4,5,6, 33], 
  [1,2,5,6,7,9], 
  [3,4,1,2,8,5, 
    [1,2,3,9, 
      [8, 
        [34]
      ]
    ] , 
    33, 34
  ]
];

// Primero hacemos la matriz de una sola dimensión
$b = [];
array_walk_recursive($a, function($a) use (&$b) {
  $b[] = $a;
});

/* En caso de ser un array de 2 dimensiones podemos usar
$b = call_user_func_array('array_merge', $a);
ó
$b = array_merge(...$a); <-- en el caso de utilizar PHP > 5.6

*/ 

// array_count_values: cuenta cada valor retornando un array (valor => cantidad)
// luego filtramos los que tengan un valor > 1
// luego recuperamos las keys (que son los valores originales
$repetidos = array_keys(
               array_filter(
                 array_count_values($b), function($v, $k) {
                   return $v > 1;
               }, ARRAY_FILTER_USE_BOTH)
             ); // es necesario PHP 5.6 para utilizar tanto keys como values en array_filter

var_dump($repetidos);

// OUTPUT:
array(6) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
}
3
ответ дан 24.11.2019, 13:41
  • 1
    Эта! Функционируй верно! Большое спасибо! –  RuralGalaxy 09.08.2016, 13:48
  • 2
    Быть и # 237; такой любезный эксперт объяснения различия между этим ответом и моим предложением, чтобы не пометить ее раньше как v и # 225; lida? S и # 243; это из-за любопытства:/ –  César González 09.08.2016, 13:55
  • 3
    @C и # 233; sarGonz и # 225; lez, как кажется, он, из-за которого ты изменяешь стоимость переменной... –  Pablo Alcantar 09.08.2016, 13:57
  • 4
    Он не изменяется ning и # 250; n стоимость переменной ввода. В конце концов... –  César González 09.08.2016, 14:10
  • 5
    у него есть raz и # 243; n @C и # 233; sarGonz и # 225; lez, он и # 237; плохо ты c и # 243; я говорю. Не s и # 233; из-за которого ruralGalaxy он показывает, что он не правилен, но b и # 225; sicamente тот же подход, что apliqu и # 233; только, что utilic и # 233; array_filter. Так или иначе, я нахожу м и # 225; s краткая она l и # 237; nea 1, так как он применяет лучшей формы flatten array. Обновлять и # 233; мой ответ с тобой l и # 237; nea, если это не беспокойство –  Pablo Alcantar 09.08.2016, 14:16

Ты можешь использовать эту комбинацию, всякий раз когда у array не было больше уровней без необходимости циклов:

$result = call_user_func_array('array_merge',$array);
$result = array_count_values ($result);
$result = array_diff($result,array(1));
$result = array_keys($result);

функция array_merge объедини элементы array в уникуме array.

array_count_values он возвращает нам число повторений каждой стоимости внутри array.

С array_diff($array,array(1)) мы находим различие между нашим array повторений и array с единственным элементом со стоимостью 1. В сущности мы удаляем keys со стоимостью 1.

Чтобы заканчиваться, мы получаем keys с array_keys.

Сочинение в единственной линии:

$result = array_keys(array_diff(array_count_values (call_user_func_array('array_merge',$array)),array(1)));
2
ответ дан 24.11.2019, 13:41
  • 1
    В случае когда хочет смотреть стоимость, повторенную внутри этого array? А именно я не хочу ning и # 250; n я просачиваюсь b и # 250; squeda, только, что достал повторенных. –  RuralGalaxy 09.08.2016, 13:26
  • 2
    С array_diff ($result, array (1)) est и # 225; s удаляя элементы с одним и #250; nica aparici и # 243; n, следовательно s и # 243; это оставаться и # 225; n элементы, что est и # 225; n повторенные. –  César González 09.08.2016, 13:40
  • 3
    Эта форма - много м и # 225; s прямая, что получающий ответ... Quiz и # 225; s ключ est и # 225; в решении для любых array мультипространственных , которые до настоящего времени не были решены никаким ответом. –  Mariano 09.08.2016, 19:03

Ты можешь использовать функцию php in_array()

Функционируй следующего способа:

<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Existe Irix";
}
if (in_array("mac", $os)) {
    echo "Existe mac";
}
?>

то, что он делает, состоит в том, чтобы подтверждать, - ли стоимость внутри array.

оставил Тебе ссылку в ней documentaciГіn: http://php.net/manual/es/function.in-array.php

0
ответ дан 24.11.2019, 13:41
  • 1
    Мультипространственный –  RuralGalaxy 09.08.2016, 10:16
  • 2
    Для этого ты был бы должен делать то же самое, только, что должен бы быть внутри одного for @RuralGalaxy –   09.08.2016, 10:17
  • 3
    @AlbertoMier и #191; и c и # 243; mo быть и # 237; в soluci и # 243; n используя in_array()? –  Mariano 09.08.2016, 19:04

Теги

Похожие вопросы