人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP 多次元配列 ループを使わないキーの削除方法を教えてください。

1.下記のような多次元配列があるとします。
$array[1][1] = 1;
$array[1][2] = 1;
$array[1][3] = 1;
$array[2][1] = 1;
$array[2][2] = 1;
$array[2][3] = 1;

2.2つめの次元の[1]というキーのものを全て削除し下記のような結果にしたいです。
$array[1][2] = 1;
$array[1][3] = 1;
$array[2][2] = 1;
$array[2][3] = 1;

3.foreach等のループを行わず高速に削除できる方法はありますでしょうか?
<<イメージ例>>
unset($array[*][1]);
※ *のような全指定キーがあればベストだと思うのですが。。

phpのバージョン等はどのバージョンでも結構です。
どうぞ宜しくお願いいたします。

●質問者: cheesKT
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Cherenkov
●50ポイント

これは違う?

<?php
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}
$data = array(
array('a', 'b', 'c'),
array('A', 'B', 'C')
);
$data = array_map(function($e) {
array_shift($e);
return $e;
}, $data);
pr($data);

cheesKTさんのコメント
説明不足で申し訳ございません。 配列の先頭を削除(array_shift)したいのではなく、指定して削除したいと考えております。 ただ関数を少しいじればそれも実現できそうですね。 他方法と実行速度を比較してみたいと思います。

2 ● うぃんど
●50ポイント ベストアンサー

一例

<?php
$a[1][1] = 11;
$a[1][2] = 12;
$a[1][3] = 13;
$a[2][1] = 21;
$a[2][2] = 22;
$a[2][3] = 23;

$f = create_function('$v,$k,$a', 'unset($a[$k][1]);');
array_walk($a, $f, &$a);

var_dump($a);

http://jp.php.net/manual/ja/function.create-function.php
http://jp.php.net/manual/ja/function.array-walk.php


cheesKTさんのコメント
ご回答ありがとうございます。 他方法と実行速度を比較してみたいと思います。

うぃんどさんのコメント
バージョン不明で、実際のデータ仕様も不明なため、 改良しやすく2行に分けたのですが、 使い回しとか考えなくて、速度最優先なら下記でどうぞ。 >|php| <?php $a[1][1] = 11; $a[1][2] = 12; $a[1][3] = 13; $a[2][1] = 21; $a[2][2] = 22; $a[2][3] = 23; array_walk($a, function(&$v){ unset($v[1]); } ); var_dump($a); ||<
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ