3

JSONファイルから生成された大量のデータを含む配列があります。ほとんどのデータはinput要素の入力に使用されますが、一部のキーには、後で計算に使用される非表示のデフォルト値が含まれています。

配列は次のようになります。

[name] => 'My App'
[default_E17] => 0.009
[default_H17] => 0.0236
[default_K17] => 50
[default_P17] => 0.0118
[default_E19] => 0.03

default_*すべてのキーをループして、HTMLを使用して出力したいと思います。基本的に、foreachループが必要ですが、フォーマットがに一致するキーに対してのみですdefault_*。これが可能かどうか誰かが知っていますか?

キーの前の配列の値[default_*]は可変長であるため、簡単に使用できないことに注意してくださいarray_splice()

4

5 に答える 5

7

あなたはそれが途中または終わりではなく、strpos($key, "default_") === 0で始まることを示すために使用しますdefault_

$array = array();
$array['name'] = 'My App';
$array['default_E17'] = "0.009";
$array['default_H17'] = "0.0236";
$array['default_K17'] = "50";
$array['default_P17'] = "0.0118";
$array['default_E19'] = "0.03";
$array['E19_default_test'] = "1.03";


echo "<pre>";

*使用できますforeach*

$list = array();
foreach ( $array as $key => $value ) {
    if (strpos($key, "default_") === 0) {
        $list[$key] = $value;
    }
}

var_dump($list);

array_flipで使用することもできますarray_filter

$array = array_flip(array_filter(array_flip($array),function($var) { return (strpos($var, "default_") === 0);}));
var_dump($array);

使用することもできますFilterIterator

class RemoveDefaultIterator extends FilterIterator {
    public function accept() {
        return (strpos($this->key(), "default_") === 0);
    }
}

$list = new RemoveDefaultIterator(new ArrayIterator($array));
var_dump(iterator_to_array($list));

それらはすべて出力します

array
  'default_E17' => string '0.009' (length=5)
  'default_H17' => string '0.0236' (length=6)
  'default_K17' => string '50' (length=2)
  'default_P17' => string '0.0118' (length=6)
  'default_E19' => string '0.03' (length=4)
于 2012-10-03T12:56:52.780 に答える
3
 foreach( $arr as $k => $v ) { //iterate the array
  if( strpos($k, 'default_') !== FALSE  ) //search if the key contains 'default_' 
   $default_values[] = $v;   // if so, store the values for the 'default_' keys   
 }
于 2012-10-03T12:55:49.740 に答える
2

配列を反復処理するだけです

Foreach( $inputArray AS $key=>$val ) {
  // check if key is the one we need
  if( ... ) {
     // it is - deal with it
  }
}

使用するキーに応じて、if()単純substr()または正規表現のマッチングを行うことができます。

于 2012-10-03T12:56:13.637 に答える
2

これにはFilterIteratorを使用できます。

アレイ全体をループするのと本質的に同じです。これが唯一の方法だからですが、生産的なループでこれを行う必要がなくなり、ノイズの発生が少なくなります。

方法は次のとおりです。

class Default_FilterIterator extends FilterIterator
{
    public function accept()
    {
      if (strpos($this->key(), 'default') === 0) {
        return true;
      }
      return false;
    }
}


$yourArray = array('default_stuff' => 'foo', 'otherstuff' => 'bar');

$filterdArray = new Default_FilterIterator(new ArrayIterator($yourArray));

foreach ($filteredArray as $key => $value) {
  //deal only with default values here
}
于 2012-10-03T13:07:11.440 に答える
1
   foreach ($your_array as $key => $value) {
     // check if the $key starst with 'default_'
     if (substr($key, 0, 8) == "default_") {
      //do your thing...
      echo "<input type='text' value='" . $value . "'>";
     }
   }
于 2012-10-03T13:03:09.243 に答える