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のバージョン等はどのバージョンでも結構です。
どうぞ宜しくお願いいたします。
一例
<?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
これは違う?
<?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);
説明不足で申し訳ございません。
配列の先頭を削除(array_shift)したいのではなく、指定して削除したいと考えております。
ただ関数を少しいじればそれも実現できそうですね。
他方法と実行速度を比較してみたいと思います。
一例
<?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
ご回答ありがとうございます。
他方法と実行速度を比較してみたいと思います。
バージョン不明で、実際のデータ仕様も不明なため、
改良しやすく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:30:22他方法と実行速度を比較してみたいと思います。
バージョン不明で、実際のデータ仕様も不明なため、
2012/09/06 04:49:52改良しやすく2行に分けたのですが、
使い回しとか考えなくて、速度最優先なら下記でどうぞ。