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のバージョン等はどのバージョンでも結構です。
どうぞ宜しくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/09/05 23:57:08
  • 終了:2012/09/13 00:00:03

ベストアンサー

id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492012/09/06 03:22:56

ポイント50pt

一例

<?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

id:cheesKT

ご回答ありがとうございます。
他方法と実行速度を比較してみたいと思います。

2012/09/06 04:30:22
id:windofjuly

バージョン不明で、実際のデータ仕様も不明なため、
改良しやすく2行に分けたのですが、
使い回しとか考えなくて、速度最優先なら下記でどうぞ。

<?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);
2012/09/06 04:49:52

その他の回答(1件)

id:Cherenkov No.1

Cherenkov回答回数1503ベストアンサー獲得回数4932012/09/06 03:09:31

ポイント50pt

これは違う?

<?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);
id:cheesKT

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

2012/09/06 04:16:11
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492012/09/06 03:22:56ここでベストアンサー

ポイント50pt

一例

<?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

id:cheesKT

ご回答ありがとうございます。
他方法と実行速度を比較してみたいと思います。

2012/09/06 04:30:22
id:windofjuly

バージョン不明で、実際のデータ仕様も不明なため、
改良しやすく2行に分けたのですが、
使い回しとか考えなくて、速度最優先なら下記でどうぞ。

<?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);
2012/09/06 04:49:52

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

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

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

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

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