アシアル株式会社主催 開発者向け、一歩先をいくためのテクニカルセミナー

<< 各ページからタイトルと日付を取得 質問一覧 UTF-8エンコード時にスラッシュが上手... >>
  • キーワードが設定されていません

  • 0P
配列要素の削除方法について

あるデータを読み込み配列へ代入したところ
以下のようになってしまいました。

要素にどのような値が入っているのか調べる方法または
空要素(空に見える?)を削除する方法を教えてください。
※当該要素は不規則で発生しています。
以上、宜しくお願い致します。

変数名は$aで、

[0]=>名称
[1]=>
[2]=>abc
[3]=>住所
[4]=>
[5]=>名古屋
[6]=>
[7]=>電話番号
[8]=>
[9]=>
[10]=>000-0000
[11]=>氏名

・・・以下省略

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。

Q配列要素の削除方法について abc1234  [09月03日 17時15分] 
┣参考になったRe:配列要素の削除方法について yakou850  [09月03日 17時33分] 
┣参考になったRe:配列要素の削除方法について NurseAngel  [09月03日 18時21分] 
┗満開Re:配列要素の削除方法について tezcello  [09月03日 23時59分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:配列要素の削除方法について

とりあえず空文字なのかNULLなのかを調べるため、
var_dump()を使ってはいかがでしょう?
これだと型がなんなのかを教えてくれます。
# stringなのかnullなのかintなのかなどなど

Re:配列要素の削除方法について

array_walkではできないみたい


・順に確認
foreach($a as $key=>$val){
 if($val==='' || is_null($val)){unset($a[$key])}
}


・動くかどうかわかんない
$a=array_diff($a,array(''))

Re:配列要素の削除方法について

かなりピッタリな関数 array_filter() があります。
配列の各要素をユーザ定義関数(下の例では、delnul())の結果に従い削除してくれます。
  指定したユーザ定義関数が TRUE を返せば残します。FALSE の場合は削除します。
「空に見える」の場合は、実際にどのようになっているかで処理が異なりますが、それに応じた処理をすればよいでしょう。

  1. function delnul($var){
  2.   if ($var == '') return FALSE;
  3.   return TRUE;
  4. }
  5.  
  6. $ary = array('名称', '', 'abc', '住所', '', '名古屋', '', '電話番号', '', '', '000-0000', '氏名');
  7.  
  8. print_r(array_filter($ary, 'delnul'));

結果は
  1. Array
  2. (
  3.     [0] => 名称
  4.     [2] => abc
  5.     [3] => 住所
  6.     [5] => 名古屋
  7.     [7] => 電話番号
  8.     [10] => 000-0000
  9.     [11] => 氏名
  10. )


でも、後からそういう処理をするのでは無く、読み込んだ値を配列に代入する時に気を使うべきでしょうね。
元がファイルであるなら、
  1. $trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
とする事で、改行文字も空行も無視されます。(PHP5 以上でないと使えません)
各ページからタイトルと日付を取得 質問一覧 UTF-8エンコード時にスラッシュが上手...