###実現したいこと
こちらの連想配列から、キーと値の指定でその行の配列を取得したいです。
###該当の連想配列
$set_arr = [ [ 'key'=>'a', 'hold'=>['cat'], 'use'=>['mew'], 'action_name'=>'honk', 'action_update'=>['animal','cute'] ], [ 'key'=>'b', 'hold'=>['dog'], 'use'=>['bow'], 'action_name'=>'bark', 'action_update'=>['animal','cool'] ], [ 'key'=>'c', 'hold'=>['cow'], 'use'=>['moo'] ], ];
###取得したい例
(例1)「action_nameがhonk」と指定
→1つだけなので下記を取得
// $resultに以下を取得したい [[ 'key'=>'a', 'hold'=>['cat'], 'use'=>['mew'], 'action_name'=>'honk', 'action_update'=>['animal','cute'] ]]
(例2)「action_updateにanimalを含む」と指定
→2つあるので下記を取得
// $resultに以下を取得したい [ [ 'key'=>'a', 'hold'=>['cat'], 'use'=>['mew'], 'action_name'=>'honk', 'action_update'=>['animal','cute'] ], [ 'key'=>'b', 'hold'=>['dog'], 'use'=>['bow'], 'action_name'=>'bark', 'action_update'=>['animal','cool'] ], ];
(例3)
あとは下記「試した関数」の最後の行で「ちなみに」とコメントしてあるように、例1と例2を「かつ」で合わせてもできるようになれればと思っています。
###試した関数
PHP初心者で調べた限界で、ご覧のように書いているのですが、nllとなってしまい、直し方がわかりません。どうやったらできるか教えて頂けませんでしょうか。
<?php function get_set_arr( $hold=null, $use=null, $action_name=null, $action_update=null ){ $set_arr = [ [ 'key'=>'a', 'hold'=>['cat'], 'use'=>['mew'], 'action_name'=>'honk', 'action_update'=>['animal','cute'] ], [ 'key'=>'b', 'hold'=>['dog'], 'use'=>['bow'], 'action_name'=>'bark', 'action_update'=>['animal','cool'] ], [ 'key'=>'c', 'hold'=>['cow'], 'use'=>['moo'] ], ]; // 引数をもとに一致する行の配列を返す $result = []; foreach( $set_arr as $set ){ if( $hold==null ? true : $hold==$set['hold'] && $use==null ? true : $use==$set['use'] && $action_name==null ? true : $action_name==$set['action_name'] && $action_update==null ? true : $action_update==$set['action_update'] ){ $result[] = $set; } } return $result; } $args = ['hold'=>['cat']]; $result = get_set_arr( $args ); var_dump( $result ); /* ちなみに $args = [ 'hold'=>['cat'], 'action_name'=>'honk' ]; など複数指定もやりたいです */
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/12 06:10
2019/10/12 06:21 編集
2019/10/12 06:27
2019/10/12 06:36
2019/10/12 06:47
2019/10/12 07:08
2019/10/12 07:18
2019/10/12 08:13
2019/10/12 08:14
2019/10/12 08:17