質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

PHP 配列のキーを指定した読み方を教えてください。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 308

score 168

下記配列の中から、「tcd」と「scd」のキーを指定して、
2つのキーが合致するレコードの、キー「sperson」の値を戻すFUNCTIONを作りたいです。

欲をいうと重複行は取り除き、カンマ区切りで戻すFUNCTIONにしたいです。

var_dump($rows);
//結果
array (size=7)
  0 => 
    array (size=06)
      'acttype' => string '更新' (length=6)
      'exrno' => string '0000006001・002' (length=16)
      'exrlno' => string '002' (length=3)
      'tcd' => string 'I73131' (length=6)
      'scd' => string 'J32536' (length=6)
      'sperson' => string 'スピルパーク' (length=18)
  1 => 
    array (size=06)
      'acttype' => string '更新' (length=6)
      'exrno' => string '0000006001・001' (length=16) 
      'acttype' => string '更新' (length=6)
      'exrlno' => string '001' (length=3)
      'tcd' => string 'I73131' (length=6)
      'scd' => string 'J32536' (length=6)
      'sperson' => string 'スピルパーク' (length=18)
  2 => 

      'exrno' => string '0000006125・001' (length=16)
      'exrlno' => string '001' (length=3)
      'tcd' => string 'I74129' (length=6)
      'scd' => string 'I74129' (length=6)
      'sperson' => string 'そんたくろう' (length=18)
  3 => 
    array (size=06)
      'acttype' => string '更新' (length=6)
      'exrno' => string '0000006125・002' (length=16)
      'exrlno' => string '002' (length=3)
      'tcd' => string 'I74129' (length=6)
      'scd' => string 'I74129' (length=6)
      'sperson' => string 'そんたくろう' (length=18)
  4 => 
    array (size=06)
      'acttype' => string '更新' (length=6)
      'exrno' => string '0000006126・001' (length=16)
      'exrlno' => string '002' (length=3)
      'tcd' => string 'I73131' (length=6)
      'scd' => string 'J32536' (length=6)
      'sperson' => string '今夜が山田!' (length=18)
  5 => 
    array (size=06)
      'acttype' => string '更新' (length=6)
      'exrno' => string '0000006126・002' (length=16)
      'exrlno' => string '002' (length=3)
      'tcd' => string 'I73131' (length=6)
      'scd' => string 'J32536' (length=6)
      'sperson' => string '今夜が山田!' (length=18)
  6 => 
    array (size=06)
      'acttype' => string '更新' (length=6)
      'exrno' => string '0000006126・003' (length=16)
      'exrlno' => string '002' (length=3)
      'tcd' => string 'I73131' (length=6)
      'scd' => string 'J32536' (length=6)
      'sperson' => string '今夜が山田!' (length=18)

例えば、下記指定のfunction実行では、
"スピルパーク,今夜が山田!,"
を戻すようなことをしたいです。

test($rows,'I73131','J32536');
FUNCTION test($rows,$tcd,$scd){
    // どういったコーディング??
}

配列も引数で指定できることが 今分かったレベルです。
ヒントだけでも良いので ご教示をよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/02/21 16:00

    同じspersonを返すtcdとscdの組み合わせが複数あるようですが、その場合はどうするのでしょうか。

    キャンセル

  • ttyp03

    2019/02/21 16:01

    >「tcd」と「scd」のキーを指定して、
    細かい指摘ですが、この配列の場合、"tcd"と"scd"がキー値になっていますので、
    「tcd」と「scd」の値を指定して、の方が適切な文章ですね。

    キャンセル

  • saya24

    2019/02/21 17:01

    >同じspersonを返すtcdとscdの組み合わせが複数あるようですが、その場合はどうするのでしょうか
    重複行は 取り除きます。”スピルパーク,今夜が山田!,”が希望の戻り値です。

    キャンセル

回答 1

checkベストアンサー

+2

function test($arr, $tcd, $scd) {
    $ret = [];
    foreach($arr as $item) {
        if($item["tcd"] !== $tcd) continue;
        if($item["scd"] !== $scd) continue;
        if(in_array($item["sperson"], $ret, true)) continue;
        $ret[] = $item["sperson"];
    }
    return $ret;
}
echo implode(",",test($rows,'I73131','J32536'));

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/21 17:01

    Arrayと帰ってきました...。

    キャンセル

  • 2019/02/21 17:36

    `echo test($rows,'I73131','J32536');`ってやったら「Arrayと帰ってきました...。」という意味だと理解して、回答に出力方法を追記しました。
    もし、コメントの意図が違うのであれば、どう出力したらArrayとなったかを教えてください。

    キャンセル

  • 2019/02/21 18:28 編集

    ご支援をありがとうございます。無事目的が達成されました。何から何まですみません。戻したい内容を連結で考えた場合、やはりループするのが良さそうですね。

    キャンセル

  • 2019/02/21 18:40

    DBだったらSQLでやったほうが早い気がする

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る