PHPのちょっとした配列の質問です。


以下の配列AからSkill要素だけ抜き出す(たとえば配列Bのようにする)PHPの関数もしくは方法をを教えてください。ロジックは書かないで、phpの標準的な関数を使ってできればベストです。ロジックを書けばなんとでもできるので・・。

配列A = array(
  'Name' => 'hoge1',
  'Type' => array(
    'Skill' = array (
      'php' => 1,
      'perl' => 1,
    )
  ),
  'Name' => 'hoge2',
  'Type' => array(
    'Skill' = array (
      'mysql' => 1,
      'oracle' => 1,
    )
  )
);

配列A = array(
  'Skill' = array (
    'php' => 1,
    'perl' => 1,
    'mysql' => 1,
    'oracle' => 1,
  )
);

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/10/12 01:32:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント60pt

"Name" => "hoge1" のあとで

"Name" => "hoge2" と書いてあるので

"Name"の中身は最後に示された"hoge2"が残る形となってしまい配列Aの定義自体が間違っている。


そこで、ソースに書かれているキーワードから何をしたいのか想像して

「テキストファイルやデータベースなどから各人のスキルを抜き出してきて

1つの配列に収めようとしている」のではないかと考えました。

空のarray作成;
ループ開始
  一人分を読み出す処理。
  arrayにmarge;
ループ終了

上の仮説が正しいのだとすれば関数としてarray_merge_recursiveを使えば解決しそうに思います。

array_merge_recursiveのサンプル

$a1 = array(
    "Name" => "hoge1",
    "Type" => array(
        "Skill" => array (
           "php" => 1,
           "perl" => 1
        )
    ),
);
$a2 = array(
    "Name" => "hoge2",
    "Type" => array(
        "Skill" => array (
            "mysql" => 1,
            "oracle" => 1
        )
    )
);
$b = array_merge_recursive($a1,$a2); // 配列全体
print_r($b);
$c = $b['Type']; //スキルだけ抜き出し
print_r($c);

$bの出力結果

Array
(
    [Name] => Array
        (
            [0] => hoge1
            [1] => hoge2
        )

    [Type] => Array
        (
            [Skill] => Array
                (
                    [php] => 1
                    [perl] => 1
                    [mysql] => 1
                    [oracle] => 1
                )

        )

)

$cの出力結果

Array
(
    [Skill] => Array
        (
            [php] => 1
            [perl] => 1
            [mysql] => 1
            [oracle] => 1
        )

)
id:cbic

array_merge_recursiveっていうのがドンビシャです!

2008/10/12 01:32:24
  • id:GoldenDawn
    二つ目の配列Aは配列Bの間違いかと思いますが、
    この配列Aの定義だと、同じ名前で上書きされて後半の 'NAME' 以降しか残らないような気がするのですが。
  • id:b-wind
    サンプルの間違いはともかく、目的に一番近いのは array_filter だろうけど、
    http://www.php.net/manual/ja/function.array-filter.php
    結局 callback は書かないといけないので要求は満たさないね。

    こういうのは PHP では無理。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません