PHP多次元配列で特定キーが重複している箇所をランダムで1つだけ表示したい
・id基準
■元配列
Array
(
[0] => Array
(
[id] => 5
[name] => "佐藤"
[age] => 5
)
[1] => Array
(
[id] => 5
[name] => "伊藤"
[age] => 7
)
[2] => Array
(
[id] => 5
[name] => "鈴木"
[age] => 12
)
[3] => Array
(
[id] => 8
[name] => "山田"
[age] => 17
)
[4] => Array
(
[id] => 8
[name] => "奈良"
[age] => 2
)
■取得したいランダム結果配列例1
Array
(
[0] => Array
(
[id] => 5
[name] => "佐藤"
[age] => 5
)
[3] => Array
(
[id] => 8
[name] => "山田"
[age] => 17
)
■取得したいランダム結果配列例2
Array
(
[1] => Array
(
[id] => 5
[name] => "伊藤"
[age] => 7
)
[4] => Array
(
[id] => 8
[name] => "奈良"
[age] => 2
)
※1次元目のキーは元キーを維持していなくても構いません
No.3ベストアンサー
- 回答日時:
function array_rand_each_group(array $arrays,$column){
$res = [];
shuffle($arrays);
foreach($arrays as $array){
$res[$array[$column]] = $array;
}
return $res;
}
$arrays = [
['id' => 5, 'name' => '佐藤', 'age' => 5],
['id' => 5, 'name' => '伊藤', 'age' => 7],
['id' => 5, 'name' => '鈴木', 'age' => 12],
['id' => 8, 'name' => '山田', 'age' => 17],
['id' => 8, 'name' => '奈良', 'age' => 2],
];
print_r(array_rand_each_group($arrays,'id'));
No.2
- 回答日時:
ちなみにRubyだとめっちゃ綺麗に書けますw
(何だかんだPHP好きなんですけどどうしてもRubyには美しさで負けてしまいますね)
def array_rand_each_group(array_of_hash, column)
array_of_hash.group_by { |x| x[column] }.values.map(&:sample)
end
array_of_hash = [
{:id => 5, :name => '佐藤', :age => 5},
{:id => 5, :name => '伊藤', :age => 7},
{:id => 5, :name => '鈴木', :age => 12},
{:id => 8, :name => '山田', :age => 17},
{:id => 8, :name => '奈良', :age => 2},
];
p array_rand_each_group(array_of_hash, :id)
回答ありがとうございました。
・Rubyだとこんなにスッキリ書けるんですね
・PHP書けるようになったら学習してみたいと思います
・参考になりましたー
No.1
- 回答日時:
<?php
function array_rand_each_group(array $arrays, $column) {
$groups = [];
foreach ($arrays as $array) {
$groups[$array[$column]][] = $array;
}
return array_values(array_map(
function ($group) { return $group[array_rand($group)]; },
$groups
));
}
$arrays = [
['id' => 5, 'name' => '佐藤', 'age' => 5],
['id' => 5, 'name' => '伊藤', 'age' => 7],
['id' => 5, 'name' => '鈴木', 'age' => 12],
['id' => 8, 'name' => '山田', 'age' => 17],
['id' => 8, 'name' => '奈良', 'age' => 2],
];
print_r(array_rand_each_group($arrays, 'id'));
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- その他(プログラミング・Web制作) パイソン初心者です 4 2022/06/29 06:49
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPからHTMLへの変数の受け...
-
名簿で「あ」行の名前の人を数...
-
サブフォルダ内の全てのテキス...
-
Smartyのテンプレート内で、連...
-
PHP MySql 画像を取得
-
PHPでURLにジャンプするには?
-
PHPの関数実行
-
PHPで、ボタンを押すと同じペー...
-
RSSと投稿記事を交互に表示させ...
-
PHPのエラーの解消法について教...
-
laravelを利用してコントロール...
-
チェックボックスによる検索
-
フォームでの記入項目
-
【HTML(PHP?)】複数のフォーム...
-
オプションメニューの書き方
-
アマゾンのような評価の星を選...
-
HTMLで前の画面に戻る時、入力...
-
PHPで画像の渡しが上手く行きま...
-
HTMLのvalue値を取得したい。
-
チェックボックスによる検索(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
Flaskでサーバー立ち上げに関して
-
POSTの項目に追加
-
ファイル名を変更してアップロ...
-
PHPで入力フォームでデータを確...
-
PHP MySql 画像を取得
-
foreachがうまく動かない
-
PHPからHTMLへの変数の受け...
-
phpで変数を使ってcopyできない
-
サブフォルダ内の全てのテキス...
-
UPDATEできない
-
php+mysqlでの重複チェックにつ...
-
phpでショッピングカート機能を...
-
fputcsv()で1レコード1行になる...
-
配列の値
-
openCVのトラックバーについて
-
if文のなかで
-
sqlite文字列を格納、出力
-
$a = ( $b == $c ) ? $d、 この...
-
$_REQUESTの意味を教えて下さい
おすすめ情報