PHPの配列操作に関する質問です。


以下のような配列があった場合に、
Array(
[0] => Array(
[title] => メロン
[number] => 0001
)
[1] => Array(
[title] => りんご
[number] =>
)
[2] => Array(
[title] => ぶどう
[number] => 0002
)
)

キー[number]が空のものを削除するにはどのような方法があるでしょうか?
上記例でいうと以下のようになるのが理想です。

Array(
[0] => Array(
[title] => メロン
[number] => 0001
)
[1] => Array(
[title] => ぶどう
[number] => 0002
)
)

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/07/24 02:26:27
  • 終了:2014/07/25 21:50:51

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4523ベストアンサー獲得回数18802014/07/24 08:48:41

ポイント50pt

array_filter() を使う感じでしょうか。

<?php
    $a = array(
        array('title' => 'メロン', 'number' => 1),
        array('title' => 'りんご'),
        array('title' => 'ぶどう', 'number' => 2)
    );

    print_r($a);


    // ★number が空の配列をフィルタリングする
    function filter_empty_number($i)
    {
        return ! empty($i['number']);
    }

    $a = array_filter($a, filter_empty_number);

    print_r($a);
?>

無名関数を使うと、こんな感じに。

<?php
    ...

    // ★number が空の配列をフィルタリングする
    $a = array_filter($a,
            function($i) {
                return ! empty($i['number']);
            }
            );

    print_r($a);
?>

array_filter() のマニュアルは、こちら。
http://php.net/manual/ja/function.array-filter.php

id:a-kuma3

おっと、補足に答える前に閉まっちゃいましたか。

もう1点知りたいのが、仮にnumberが数値の場合にnumberが5以上の配列で作りなおすという場合はどのようにすればよいのでしょうか?

自分で答えにたどり着いたのだとは想像しますが、一応、念のため。
array_filter に渡す callback 関数の中身を変えるだけで対応できます。

<?php
    ...

    function filter_number_over5($i)
    {
        return $i['number'] >= 5;   // ★ココ!
    }

    $a = array_filter($a, filter_number_over5);
?>

# 気持ち悪いんで、関数名も変えましたが。

2014/07/25 22:28:21
id:finnapple

ご返信遅くなりまして申し訳ございません。
サンプルソースまでありがとうございました。

ご推測の通り自力で解決出来ました。

ご丁寧にありがとうございました。

2014/07/30 22:43:33

その他の回答(1件)

id:pogpi No.1

POGPI回答回数377ベストアンサー獲得回数502014/07/24 06:21:30

ポイント50pt

in_array('number',$hoge)で、$hogeにnumberがあるか分かります。
新たに配列を作って、numberがあれば追加して、元の配列に置き換えればできますね。

id:a-kuma3 No.2

a-kuma3回答回数4523ベストアンサー獲得回数18802014/07/24 08:48:41ここでベストアンサー

ポイント50pt

array_filter() を使う感じでしょうか。

<?php
    $a = array(
        array('title' => 'メロン', 'number' => 1),
        array('title' => 'りんご'),
        array('title' => 'ぶどう', 'number' => 2)
    );

    print_r($a);


    // ★number が空の配列をフィルタリングする
    function filter_empty_number($i)
    {
        return ! empty($i['number']);
    }

    $a = array_filter($a, filter_empty_number);

    print_r($a);
?>

無名関数を使うと、こんな感じに。

<?php
    ...

    // ★number が空の配列をフィルタリングする
    $a = array_filter($a,
            function($i) {
                return ! empty($i['number']);
            }
            );

    print_r($a);
?>

array_filter() のマニュアルは、こちら。
http://php.net/manual/ja/function.array-filter.php

id:a-kuma3

おっと、補足に答える前に閉まっちゃいましたか。

もう1点知りたいのが、仮にnumberが数値の場合にnumberが5以上の配列で作りなおすという場合はどのようにすればよいのでしょうか?

自分で答えにたどり着いたのだとは想像しますが、一応、念のため。
array_filter に渡す callback 関数の中身を変えるだけで対応できます。

<?php
    ...

    function filter_number_over5($i)
    {
        return $i['number'] >= 5;   // ★ココ!
    }

    $a = array_filter($a, filter_number_over5);
?>

# 気持ち悪いんで、関数名も変えましたが。

2014/07/25 22:28:21
id:finnapple

ご返信遅くなりまして申し訳ございません。
サンプルソースまでありがとうございました。

ご推測の通り自力で解決出来ました。

ご丁寧にありがとうございました。

2014/07/30 22:43:33
id:finnapple

ご回答ありがとうございます。
基本的に配列を作り直すという考え方をすればよいことがわかりました。
もう1点知りたいのが、仮にnumberが数値の場合にnumberが5以上の配列で作りなおすという場合はどのようにすればよいのでしょうか?

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません