2017-11-01 7 views
0

から最大カウント値を取得しますPHP、私が最も定期的であるオブジェクトを見つける必要があり、配列の配列

$items = array("370","370","546","55"); 
$value = max($items); 
$key = array_search($value, $items); 

このプリントアウト2と

546しかし、どのようにすることができます私は出力とその関連値、私の例では?

+2

配列には_key_ 370がありません。配列のキーは0,1,2,3です。 – CBroe

+0

出力はどのようにする必要がありますか? 2または370? – rahulsm

+0

@rahulsmはいまったく – NineCattoRules

答えて

2

を私は@alistaircolアイデアを取って、私も(それが配列の順序に依存だとして)それを修正するだけでなく割り当て部分を簡略化して2つの新しい配列を作成しません

ここで試すことができます

http://sandbox.onlinephpfunctions.com/code/2fe11fb6040dc68db43fb5cbb858ef3e47394dd2

そしてここでコード

$items = [370,370,546,55,55,55]; 
$counted = array_count_values($items); 

arsort($counted); //sort descending maintain keys 

$occurences = reset($counted); //get the first value (rewinds internal pointer) 
$most_frequent = key($counted); //get the key, as we are rewound it's the first key 

echo $most_frequent . ' appears ' . $occurences . ' time(s)' . PHP_EOL; 

これはちょうどFYIオリジナルの答えは、このテストケース

http://sandbox.onlinephpfunctions.com/code/fe13e7a0bd00ea1219bc69e2bc5a5aebaf478034

Whのを失敗していました@alistaircol

55 appears 3 time(s) 

を出力し、正しくあります

$items = [370,370,546,55]; 

へ:ICHから入力配列を変更している

$items = [370,370,546,55,55,55]; 

それだろう、まだ出力:正しい答えは55 appears 3 time(s)

これである。この場合

370 appears 2 time(s) 

最も多くのアイテムが最後のもので、それはその注文に基づいていることを公開しています(最初のインデックス[0]を使用しているため私には明らかでした)

彼に電話しないでください。答えとして受け入れられたので、私はそれを指摘しなければならないと感じました。全体として、私はその質問に対する健全なアプローチでした。だから、それについての名誉です。もっとして1時間を表示すべての値を取得する

UPDATE

一つの方法は、このようなものです:

Array 
(
    [1] => 370 
    [4] => 55 
    [5] => 55 
) 

はあなたがここにhttp://sandbox.onlinephpfunctions.com/code/53df6a8ea7a68768572cfef494e3b715aa13e83b

それをテストすることができます出力

$items = [370,370,546,55,55,55]; 

$unique = array_unique($items); 

$diff = array_diff_assoc($items, $unique); 

print_r($diff); 

メモは、あなたは実際に存在するものが1つ少ないことを正確に知ることができます。

UPDATE1

我々は簡単に見つからない1のためにこれらのアカウントを組み合わせることができます。

$items = [370,370,546,55,55,55]; 

$unique = array_unique($items); 

$diff = array_diff_assoc($items, $unique); 

print_r($diff); 
echo "\n\n"; 

$counted = array_count_values($diff); 

arsort($counted); //sort descending maintain keys 

$occurences = reset($counted); //get the first value (rewinds internal pointer) 
$most_frequent = key($counted); //get the key, as we are rewound it's the first key 

echo $most_frequent . ' appears ' . ($occurences + 1) . ' time(s)' . PHP_EOL; 

出力(両方とも以前のもの)

Array 
(
    [1] => 370 
    [4] => 55 
    [5] => 55 
) 

55 appears 3 time(s) 

ああ、あなたはより多くのあるものにしたい場合:

http://sandbox.onlinephpfunctions.com/code/1bc1a30a5e091af3a18fec2c8b48050869108549

とコードことをテストするには、このフィドルを参照してください。 1つは重複のないリストとして、次にユニークな配列でもう一度ヒットします$unique = array_unique($diff);

乾杯!

+0

最終的な説明をありがとう...しかし、あなたの例では、私はどのようにして2番目の値を得ることができますか? 370 2 – NineCattoRules

+0

あなたは何度も現れるすべて、これ、またはこれを望みますか?あなたが従うならば。 – ArtisticPhoenix

+0

他の答えであなたのフィドルをコメントとして見ました。それは私にとって完璧なので、 'echo $ number_appears_most [1] 'のように使うこともできます。 '出現する'。 $ number_of_occurences [1]。 '時間(s)'。 PHP_EOL; ' – NineCattoRules

0

あなたのケースで動作するはずのPHP関数array_count_valuesがあります。

次に、すべての値の数が配列されていて、それらを並べ替えて処理できます。

https://secure.php.net/manual/en/function.array-count-values.php

$items = array("370","370","546","55"); 
print_r(array_count_values($items)); 
+0

ありがとう、私はすでに知っていますが、どうすれば370と2を出力することができますか? – NineCattoRules

1

あなたは、この方法のように同じ値の数を見つけることができます。

print_r(array_count_values($items)); 

意志出力

Array 
(
    [370] => 2 
    [546] => 1 
    [55] => 1 
    etc... 
) 

2と307値を取得するには、物事の下に行う必要があります。

$new_arr = array_count_values($items); 
$max = max($new_arr); 
$new_arr = array_keys($new_arr, max($new_arr))); 
echo $new_arr[0]."is repeated (".$max.") times."; 

意志出力私はそれが表示された回数(例えば2を取得するために(例えば370)最も出現番号を取得するためにarray_count_valuesと結果の配列の使用からarray_keysを使用してarray_values

307 is repeated (2) times. 
+0

私はそれを使用することはできません、私は数字を知らない370 – NineCattoRules

2

)。

<?php 
$items = [370,370,546,55]; 
$counted = array_count_values($items); 
/* 
Array 
(
    [370] => 2 
    [546] => 1 
    [55] => 1 
) 

*/ 

$number_appears_most = array_keys($counted); 
/* 
Array 
(
    [0] => 370 
    [1] => 546 
    [2] => 55 
) 
*/ 

$number_of_occurences = array_values($counted); 
/* 
Array 
(
    [0] => 2 
    [1] => 1 
    [2] => 1 
) 
*/  
echo $number_appears_most[0] . ' appears ' . $number_of_occurences[0] . ' time(s)' . PHP_EOL; 

これはあなたを与える:

370 appears 2 time(s) 

デモ:https://eval.in/890626

+1

おかげで、ありがとう! – NineCattoRules

+0

あなたのコードは、注文に基づいています。このフィドルを参照してください。http://sandbox.onlinephpfunctions.com/code/fe13e7a0bd00ea1219bc69e2bc5a5aebaf478034 – ArtisticPhoenix

+0

正解は「55は3回表示されます」ですが、変更はありません。これを解決するには、発生数をソートする必要があります。私は 'arsort($ counted);を実行することをお勧めします。 – ArtisticPhoenix

1
$items = [370,370,546,55,55]; 
$counted = array_count_values($items); // count occurrences 
$counted=array_intersect ($counted,[max($counted)]); // only keep elements with highest occurrence 
var_export ($counted); // print to screen 
関連する問題