我有一个包含大量数据的数组,这些数据是从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()
。
答案 0 :(得分: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)
答案 1 :(得分: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
}
答案 2 :(得分:2)
迭代你的数组
Foreach( $inputArray AS $key=>$val ) {
// check if key is the one we need
if( ... ) {
// it is - deal with it
}
}
取决于您使用的密钥if()
可以是简单substr()
或正则表达式匹配。
答案 3 :(得分: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
}
答案 4 :(得分: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 . "'>";
}
}