繁体   English   中英

通过前缀将compact()变量放入数组中?

[英]compact() variables into array by prefix?

这可能吗?

像用所有带有特定前缀的变量组成数组吗?

我不需要键只是值,但是我想我可以在数组上使用array_values。

如果您需要执行此操作,那么一开始可能编写得不太好,但是,这是执行操作的方法:)

$foobar = 'test';
$anothervar = 'anothertest';
$foooverflow = 'fo';
$barfoo = 'foobar';

$prefix = 'foo';
$output = array();
$vars = get_defined_vars();
foreach ($vars as $key => $value) {
    if (strpos($key, $prefix) === 0) $output[] = $value;
}

/*
$output = array(
    'test', // from $foobar
    'fo', // from $foooverflow
);
*/

http://php.net/manual/zh/function.get-defined-vars.php

我的眼睛有点流血,但我无法抗拒一根眼线。

print_r(iterator_to_array(new RegexIterator(new ArrayIterator(get_defined_vars()), '/^' . preg_quote($prefix) . '/', RegexIterator::GET_MATCH, RegexIterator::USE_KEY)));

如果您正在谈论全局范围内的变量,则可以使用$GLOBALS[]

$newarray = array();

// Iterate over all current global vars 
foreach ($GLOBALS as $key => $value) {
  // And add those with keys matching prefix_ to a new array
  if (strpos($key, 'prefix_' === 0) {
    $newarray[$key] = $value;
  }
}

如果您在全局范围内有很多变量,则执行起来会比手动将所有变量手动添加到compact()要慢,但键入时会更快。

附录

我只是补充(尽管我怀疑您已经知道),如果您能够重构此代码,则最好将相关变量首先组合到一个数组中。

这是我的第二个答案,它显示了如何通过使用一个简单的PHP对象来做到这一点而不会弄乱全局范围:

$v = new stdClass();
$v->foo = "bar";
$v->scope = "your friend";
$v->using_classes = "a good idea";
$v->foo_overflow = "a bad day";

echo "Man, this is $v->using_classes!\n";

$prefix = "foo";
$output = array();
$refl = new ReflectionObject($v);
foreach ($refl->getProperties() as $prop) {
        if (strpos($prop->getName(), $prefix) === 0) $output[] = $prop->getValue($v);
}

var_export($output);

这是输出:

Man, this is a good idea!
array (
  0 => 'bar',
  1 => 'a bad day',
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM