我需要从这个数组中获取股票价值:
Array (
[stock0] => 1
[stockdate0] =>
[stock1] => 3
[stockdate1] => apple
[stock2] => 2 [
stockdate2] =>
)
我需要在这个数组上进行模式匹配,其中数组键=“stock”+ 1个通配符。 我已经尝试使用数组过滤器函数来获取PHP手册上的所有其他值但是 空值似乎把它扔掉了。我尝试了很多不同的东西,但没有任何工作。
可以这样做吗?
答案 0 :(得分:4)
<?php
$foo =
array (
'stock0' => 1,
'stockdate0' => 1,
'stock1' => 3,
'stockdate1' => 2,
);
$keys = array_keys( $foo );
foreach ( $keys as $key ) {
if ( preg_match( '/stock.$/', $key ) ) {
var_dump( $key );
}
}
我希望我正确解释你想要'股票',1个不是换行符的通配符,然后是字符串结尾。
答案 1 :(得分:4)
你应该将它们存储为:
Array(
[0] => Array(
stock => 1,
stockdate => ...
),
[1] => Array(
stock => 3,
stockdate => apple
),
...
)
答案 2 :(得分:3)
自PHP 5.6.0起,flag
选项已添加到array_filter
。这允许您根据数组键而不是其值进行过滤:
array_filter($items, function ($key) {
return preg_match('/^stock\d$/', $key);
}, ARRAY_FILTER_USE_KEY);
答案 3 :(得分:2)
array_filter无法访问密钥,因此不适合您的工作。
我相信你要做的是:
$stocks = Array (
"stock0" => 1,
"stockdate0" => '',
"stock1" => 3,
"stockdate1" => 'apple',
"stock2" => 2,
"stockdate2" => ''
);
$stockList = array(); //Your list of "stocks" indexed by the number found at the end of "stock"
foreach ($stocks as $stockKey => $stock)
{
sscanf($stockKey,"stock%d", &stockId); // scan into a formatted string and return values passed by reference
if ($stockId !== false)
$stockList[$stockId] = $stock;
}
现在$ stockList看起来像这样:
Array (
[0] => 1
[1] => 3
[2] => 2
)
你可能需要稍微大惊小怪,但我认为这就是你所要求的。
但是,如果你有选择的话,你真的应该关注Jeff Ober的建议。
答案 4 :(得分:1)
# returns array('stock1' => 'foo')
array_flip(preg_grep('#^stock.$#', array_flip(array('stock1' => 'foo', 'stockdate' => 'bar'))))
不确定性能有多好,因为正则表达式和两次翻转,但具有出色的可维护性(循环中没有错误捕获)。
答案 5 :(得分:0)
好的工作解决方案: 绿色的ChronoFish!
$stockList = array(); //Your list of "stocks" indexed by the number found at the end of "stock"
foreach ($stock as $stockKey => $stock)
{
sscanf($stockKey,"message%d", $stockId); // scan into a formatted string and return values passed by reference
if ($stockId !== false) {
$stockList[$stockId] = $stock;
}
$stockList=array_values($stockList); //straightens array keys out
$stockList = array_slice ($stockList, "0", $count); //gets rid of blank value generated at end of array (where $count = the array's orginal length)
print_r ($stockList);