配列に関する初歩的な質問です。アルゴリズムを教えてください。ありがとうございます
$arrItem = array(
Array ('code'=>10000,'name'=>'China' 、's'=>1)、
配列 ('コード'=>30000、'名前'=>'フランス'、's'=>50)、
配列 ('コード' = >30000,'name'=>'フランス','s'=>100),
Array ('code'=>10000,'name'=>'中国','s' = >3)、
配列 ('code'=>20000、'name'=>'米国'、's'=>2)、
配列 ('code'=> 30000, 'name'=>'France','s'=>5)
);
は元々上記の配列なので、取得したいのは次のとおりです:
$arr = array (
Array ('code'=>10000,'name'=>'中国'),
Array ('code'=>20000,'name'=>' United States'),
Array ('code'=>30000,'name'=>'France')
);
現在混乱しているので、次の情報を提供してください。解決策、ありがとう!
-----解決策---------
[work@cq01-client-test03.vm.baidu.com htdocs]$ php test.php <?php /*関数名は大文字と小文字が区別されません*/ $arrItem = 配列( 配列 ('コード'=>10000、'名前'=>'中国'、'=>1)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>50)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>100)、 配列 ('コード'=>10000、'名前'=>'中国'、'=>3)、 配列 ('コード'=>20000、'名前'=>'米国'、'=>2)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>5) ); foreach ($arrItem として &$elem) { unset($elem['s']); } print_r($arrItem); ?> <br /><font color='#e78608'>------解決策---------</font><br /><dl class='code'>PHP コード<pre class="brush:php;toolbar:false"> $arrItem = 配列( 配列 ('コード'=>10000,'名前'=>'中国','=>1)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>50)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>100)、 配列 ('コード'=>10000、'名前'=>'中国'、'=>3)、 配列 ('コード'=>20000、'名前'=>'米国'、'=>2)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>5) ); //最初に 2 次元配列の最後の要素を削除します for($i = 0; $i <count($arrItem); $i ++) array_pop($arrItem[$i]); echo '<pre class="brush:php;toolbar:false">'; //重複した要素を削除 $ar_tmp = 配列(); foreach($arrItem as $v) $ar_tmp[] = implode(',', $v); $ar_tmp = array_unique($ar_tmp); $result = 配列(); foreach($ar_tmp as $v) $result[] =explode(',', $v); print_r($result); <br><font color="#e78608">------解決策---------</font><br>
//6階のコードが間違っています。キー名が予約されていません。変更してください。 $arrItem = 配列( 配列 ('コード'=>10000,'名前'=>'中国','=>1)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>50)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>100)、 配列 ('コード'=>10000、'名前'=>'中国'、'=>3)、 配列 ('コード'=>20000、'名前'=>'米国'、'=>2)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>5) ); 関数 ar_unique($ar) { $result = 配列(); for($i = 0; $i <count array_pop foreach as if echo print_r> 配列 ( [コード] => 10000 [名前] => ) [1] => 配列 ( [コード] => 30000 [名前] => ) [2] => 配列 ( [コード] => 20000 [名前] => ) ) */ <br><font color="#e78608">------解決策------------------</font><br>一度だけ機能する関数を作成しましょう<dl class="code">PHP コード<pre class="brush:php;toolbar:false"> $arrItem = 配列( 配列 ('コード'=>10000,'名前'=>'中国','=>1)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>50)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>100)、 配列 ('コード'=>10000、'名前'=>'中国'、'=>3)、 配列 ('コード'=>20000、'名前'=>'米国'、'=>2)、 配列 ('コード'=>30000、'名前'=>'フランス'、'=>5) ); print_r(array_group($arrItem, 'name', 'code,name')); 関数 array_group($ar, $k, $fields='*') { if(! is_array(current($ar))) return $ar // 1 次元配列の場合は元の配列を返します。 if(! is_array($fields)) { if($fields == '*') $fields = array_keys(current($ar)); それ以外の場合 $fields =explode(',', $fields); } foreach($ar as $row) { $t = 配列(); foreach($fields as $p) $t[$p] = $row[$p]; $res[$row[$k]] = $t; } 配列値($res)を返します; } <div class="clear"></div>