Соответствие шаблона на ключе массива

При поиске устойчивой, недорогой альтернативы большим мальчикам, LogiXML имеет dashboarding и специальное создание отчетов о платформе.NET. Мы использовали их с конца 2006 года, когда Pentaho только запускался, но я не посмотрел на него в некоторое время.

5
задан Peter O. 15 October 2012 в 00:19
поделиться

4 ответа

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 
)

Возможно, вам придется немного повозиться с этим, но я думаю, что это именно то, о чем вы просите.

ОДНАКО, вам действительно следует следовать совету Джеффа Обера, если у вас есть возможность сделать это.

2
ответ дан 18 December 2019 в 11:58
поделиться
<?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 );
    }
}

I'm hoping I interpreted correctly and you wanted 'stock', 1 wildcard character thats not a newline, then end of string.

4
ответ дан 18 December 2019 в 11:58
поделиться

You should store those as:

Array(
  [0] => Array(
    stock => 1,
    stockdate => ...
  ),
  [1] => Array(
    stock => 3,
    stockdate => apple
  ),
  ...
)
4
ответ дан 18 December 2019 в 11:58
поделиться

Нормальное рабочее решение: Зеленый для 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);
0
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: