プロが教える店舗&オフィスのセキュリティ対策術

Array =>
[0] => Array
 ['id'] => '10'
 ['size'] => Array
  ['height'] => '25.1'
  ['width'] => '10.6'
  ['length'] => '15.7'
 ['name'] => 'shose'
 ['comment'] => ''
[1] => Array
 ['id'] => '10'
 ['size'] => Array
  ['height'] => '25.1'
  ['width'] => '10.6'
  ['length'] => null
 ['name'] => 'paper'
 ['comment'] => 'color is red'
 
上記のように配列の中の要素の値が全てstring型で、値がない要素だけnullという配列があります。
この配列の全ての文字列を、

 整数に変換可能ならint型に変換
 浮動小数点型に変換可能ならfloat型に変換
 数値に変換不可能ならstring型のまま
 nullの場合はnullのまま

にキャストしたいのですがどのようなコードになるのでしょうか?
ネストの深さは一定ではありません。
よろしくお願い致します。

A 回答 (2件)

ちょっと雑ですが再帰処理を場合分けして書いてみました



<pre>
<?PHP
$a=array(
array(
'id'=>'10'
,'size'=>Array('height'=>'25.1','width'=>'10.6','length'=>'15.7')
,'name'=>'shose'
,'comment'=>''
)
,array(
'id'=>'10'
,'size'=>array('height'=>'25.1','width'=>'10.6','length'=>null)
,'name'=>'paper'
,'comment'=>'colorisred'
)
,array(
'id'=>'10'
,'size'=>array('height'=>'25','width'=>'10.0','length'=>'0')
,'name'=>'paper'
,'comment'=>'colorisred'
)
);

function test_cast(&$item, $key)
{
if(is_null($item) or $item===''){
$item=null;
}elseif(preg_match("/^[0-9]+$/",$item)){
$item=(int) $item;
}elseif(preg_match("/^[0-9]+\\.[0-9]+$/",$item)){
$item=(float) $item;
}
}

array_walk_recursive($a, 'test_cast');
var_dump($a);
?>
    • good
    • 1
この回答へのお礼

ありがとうございます。
array_walk_recursiveは知りませんでした。
array_mapも使えそうだったのでこちらも使ってみましたがうまく行きました。
コードも書いていただき、大変助かりました!

お礼日時:2014/01/30 22:21

仮に10.0などのような数値はintとみなしたいのでしょうか?


それともfloatでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
10.0はfloatとみなします。
なので.がある数値だけの文字列は必ずfloatにしたいです。

お礼日時:2014/01/30 16:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!