Bir Dizi Key desen Maç

4 Cevap php

Ben bu dizinin dışında hisse senedi değerlerini almak gerekir:

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

I need to pattern match on this array, where the array key = "stock" + 1 wildcard character. I have tried using the array filter function to get every other value on the PHP manual but the empty values seem to throw it out. I tried alot of different things I found but nothing is working.

Bu yapılabilir mi?

4 Cevap

array_filter anahtarına erişimi yok ve bu nedenle iş için doğru aracı da değildir.

Ben ne yapmak arıyorsanız bu olduğunu inanıyoruz:

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

Şimdi $ stok listesi şöyle:

Array ( 
[0] => 1
[1] => 3 
[2] => 2 
)

Onunla biraz yaygara gerekebilir, ama bu sizin için ne soruyorsun olduğunu düşünüyorum.

Bunu yapmak için seçeneği varsa ANCAK, gerçekten Jeff Ober tavsiyesi takip edilmelidir.

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

Sonra dize sonuna, 1 joker karakter satırbaşı thats değil, ben doğru yorumlanmış ve 'stok' istedi umuyorum.

: Sen gibi bu saklamalısınız

Array(
  [0] => Array(
    stock => 1,
    stockdate => ...
  ),
  [1] => Array(
    stock => 3,
    stockdate => apple
  ),
  ...
)
# returns array('stock1' => 'foo')
array_flip(preg_grep('#^stock.$#', array_flip(array('stock1' => 'foo', 'stockdate' => 'bar'))))

Performans regex ve iki takla nedeniyle emin ne kadar iyi, ama mükemmel idame (döngüler hiçbir hata avcılık) değil.