5

この配列から株価を取得する必要があります。

Array ( 
[stock0] => 1
[stockdate0] => 
[stock1] => 3 
[stockdate1] => apple 
[stock2] => 2 [
stockdate2] => 
) 

この配列でパターンマッチを行う必要があります。ここで、配列キー= "stock"+1ワイルドカード文字です。配列フィルター関数を使用してPHPマニュアルで他のすべての値を取得しようとしましたが、空の値はそれを破棄しているようです。私は見つけたさまざまなことをたくさん試しましたが、何も機能していません。

これはできますか?

4

6 に答える 6

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 );
    }
}

私が正しく解釈したことを願っています.'stock'、改行ではない1つのワイルドカード文字、そして文字列の終わりが必要でした.

于 2009-10-20T16:18:22.293 に答える
4

それらを次のように保存する必要があります。

Array(
  [0] => Array(
    stock => 1,
    stockdate => ...
  ),
  [1] => Array(
    stock => 3,
    stockdate => apple
  ),
  ...
)
于 2009-10-20T16:18:49.857 に答える
4

PHP 5.6.0 以降、このflagオプションが に追加されましたarray_filter。これにより、値ではなく配列キーに基づいてフィルタリングできます。

array_filter($items, function ($key) {
  return preg_match('/^stock\d$/', $key);
}, ARRAY_FILTER_USE_KEY);
于 2015-01-08T15:53:15.513 に答える
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 のアドバイスに従う必要があります。

于 2009-10-20T18:05:11.523 に答える
1
# returns array('stock1' => 'foo')
array_flip(preg_grep('#^stock.$#', array_flip(array('stock1' => 'foo', 'stockdate' => 'bar'))))

正規表現と 2 つのフリップによるパフォーマンスの良さはわかりませんが、保守性は優れています (ループ内でのバグハンティングはありません)。

于 2013-02-12T17:45:14.413 に答える
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);
于 2009-10-21T08:57:08.090 に答える