выбор ключа массива на основе частичной строки - PullRequest
32 голосов
/ 14 октября 2010

У меня есть массив, и в этом массиве у меня есть ключ массива, который выглядит следующим образом: show_me_160 этот ключ массива может немного измениться, поэтому иногда страница может загружаться, а ключ массива может быть show_me_120, я хочу сейчасможно просто найти строку, совпадающую с ключом массива до последнего _, чтобы я мог проверить, какое значение стоит после последнего подчеркивания?

Ответы [ 7 ]

28 голосов
/ 14 октября 2010

одно решение, которое я могу придумать:

foreach($myarray as $key=>$value){
  if("show_me_" == substr($key,0,8)){
    $number = substr($key,strrpos($key,'_'));
    // do whatever you need to with $number...
  }
}
18 голосов
/ 08 апреля 2013

Недавно я столкнулся с подобной проблемой. Вот что я придумал:

$value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))];
8 голосов
/ 14 октября 2010

вам придется перебирать свой массив для проверки каждого ключа отдельно, поскольку у вас нет возможности напрямую запросить массив (я предполагаю, что массив также содержит полностью несвязанные ключи, но вы можете пропустить if часть, если это не так):

foreach($array as $k => $v)
{
  if (strpos($k, 'show_me_') !== false)
  {
    $number = substr($k, strrpos($k, '_'));
  }
}

Однако, это звучит как очень странный способ хранения данных, и на вашем месте я бы проверил, нет ли другого способа (более эффективный)) передачи данных в вашем приложении;)

4 голосов
/ 14 октября 2010

Вы также можете использовать решение на основе preg_match:

foreach($array as $str) {
        if(preg_match('/^show_me_(\d+)$/',$str,$m)) {
                echo "Array element ",$str," matched and number = ",$m[1],"\n";
        }
}
1 голос
/ 03 января 2019

для поиска определенной строки в ключах массива вы можете использовать array_filter(); см. Документы

// the array you'll search in
$array = ["search_1"=>"value1","search_2"=>"value2","not_search"=>"value3"];
// filter the array and assign the returned array to variable
$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($key){ 
        return(strpos($key,'search_') !== false);
    }, 
    // flag to let the array_filter(); know that you deal with array keys
    ARRAY_FILTER_USE_KEY
);
// print out the returned array
print_r($foo);

если вы ищете в значениях массива, вы можете использовать флаг 0 или оставить флаг пустым

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value){ 
        return(strpos($value,'value') !== false);
    }, 
    // flag to let the array_filter(); know that you deal with array value
    0
);

или

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value){ 
        return(strpos($value,'value') !== false);
    }
);

при поиске в значениях массива и ключах массива вы можете использовать флаг ARRAY_FILTER_USE_BOTH

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value, $key){ 
        return(strpos($key,'search_') !== false or strpos($value,'value') !== false);
    },
    ARRAY_FILTER_USE_BOTH
);

в случае, если вы будете искать оба, вам нужно передать 2 аргумента в функцию обратного вызова

0 голосов
/ 17 декабря 2018

filter_array ($ array, function ($ var) {return (strpos ($ var, 'ищете_слово))! == FALSE);},);

возвращаем массив' search_key '=>' значениеназначен на ключ '

0 голосов
/ 13 июля 2016
 foreach($myarray as $key=>$value)
    if(count(explode('show_me_',$event_key)) > 1){
         //if array key contains show_me_
    }

Дополнительная информация (пример):

если ключ массива содержит 'show_me_'

$ example = explode ('show_me _', 'show_me_120');

print_r ($ пример)

Array ( [0] => [1] => 120 ) 

print_r (количество ($ пример))

2 

print_r ($ пример [1])

 120 
...