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回まで
  • 登録:
  • 終了:2014/07/25 21:50:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153

ポイント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

回答回数428ベストアンサー獲得回数59

ポイント50pt

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

id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

ポイント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以上の配列で作りなおすという場合はどのようにすればよいのでしょうか?

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

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

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

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

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