Jump to content
  • 0

Выбор из массива по правилу


alex_anderr
 Share

Question

Привет.

Подскажите, как из массива выбрать все значения ключей удовлетворяющих условию "v*", где звездочка любое количество или набор симоволов.

$arr = array(v1 => 1, v2 => 2, v3 => 3, v4 => 4, bla => bla)

Могу предположить только вариант с preg_match() и in_array(). Может есть отдельно спец функция на такое?

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

либо приведите конкретный пример, либо подробнее опишите задачу, потому что в вашем примере нет и намека на условие задачи.

у вас написано:

Подскажите, как из массива выбрать все значения ключей удовлетворяющих условию "v*", где звездочка любое количество или набор симоволов.

а это значит примерно следующее:


$arr = array(v1 => 1, v2 => 2, v1 => 3, v2 => 4, v2 => bla);

то есть они могут быть и одинаковыми и нужно выбрать все значения например v2.

Link to comment
Share on other sites

  • 0

rus, а ты уверен что в массиве бывают одинаковые ключи? ;)

и не мешало бы их в кавычки взять

нет, конечно же нет, иначе они просто перезапишутся, но вот эта фраза меня просто сбивает с толку:

"v*", где звездочка любое количество или набор симоволов.

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


$arr = array(v1 => 1, v2 => 2, v1 => 3, v2 => 4, v2 => bla);
foreach($arr as $val) {
echo $val.'<br>';
}

но ТС походу не то нужно, вот я и сказал ему что бы он более подробней пояснил в чем проблема.

Link to comment
Share on other sites

  • 0

ну не знаю.. мне показалось что alex_anderr хочет получить массив в котором ключи начинаются на "V" :)

хм..., возможно вы правы, че-то я такой не внимательный, что даже не увидел: bla => bla :D

Link to comment
Share on other sites

  • 0

Жжете господа :)

Gold Dragon, все правильно понял. Спасибо за пример, мой "недуг" сразу прошел.

--


if($key[0]=='v') $b[$key] = $value;

А так, для справки. Если в каких-то ключах присутствует "v", то брать эти ключи. Так?

Link to comment
Share on other sites

  • 0

alex_anderr, как вариант, можно вычислять позицию буквы v в имени ключа массива с помощью strpos. Если буква не встретится вообще, условие не выполнится.


$a = array('v3'=>3, 'v5'=>5, 'q1'=>1, 'v7'=>7,'q2'=>2);
foreach($a as $key => $value){
if (strpos($key, "v")) $b[$key] = $value;
}
print_r($B);

Edited by hypnocolor
  • Like 1
Link to comment
Share on other sites

  • 0

hypnocolor, этот вариант я даже понимаю ) +

Dagot, это условие, где первая буква должна быть 'v'

Вопрос все равно у меня остался еще (см выше). Люблю понимать код, который пишу :)

Link to comment
Share on other sites

  • 0

Жжете господа :)

Gold Dragon, все правильно понял. Спасибо за пример, мой "недуг" сразу прошел.

--


if($key[0]=='v') $b[$key] = $value;

А так, для справки. Если в каких-то ключах присутствует "v", то брать эти ключи. Так?

Вопрос все равно у меня остался еще (см выше). Люблю понимать код, который пишу :)

Если нужны только ключи - то да , но я думаю ключи и значения

Link to comment
Share on other sites

  • 0
Если в каких-то ключах присутствует "v", то брать эти ключи. Так?
Задача была не "присутствует", а "начинается с" :) По этому мы напрямую обращаемся в первой знаку ключа.. И по моему, strpos() будет медленнее работать

Быколай, не только вижу, но и ничего поделать не смог... Каким-то странным образом при сохранении поста парсер превращает строчную букву в заглавную... Так и не смог исправить вчера

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy