2013-05-02 5 views
2

Не видел ответа, который я мог бы использовать, поэтому я собираюсь спросить.Извлечение строки из массива PHP

У меня есть строка запроса, которую я разбил на массив значений путем взрыва на знаке «&». Итак, теперь у меня есть массив, содержащий строки, такие как:

[email protected]_domain.com 
name=Michael+D+Linear 
name=Michael%20Linear 

и множество других строк.

Что мне нужно, чтобы выполнить поиск по массиву и найти строки «email» и строки «name» и поместить фактический адрес электронной почты в новую переменную, первое имя в переменную и последнюю имя в переменную.

Не знаю, как это сделать эффективно.

Имя всегда будет отображаться либо первым, либо вторым способом - ни тем, ни другим. Итак, один раз строка запроса может содержать имя в формате First + Middle + Last (возможно, не имеет среднего имени, но все части имени будут разделены знаком + вместо пробела). В других случаях имя заменяет пробелы значком% 20. Никогда в обоих запросах.

Как выполнить поиск по массиву, найти строки по электронной почте и именам, а затем извлечь их в новые переменные?

Спасибо за любую помощь. Все это время я размахивал мозгом. Не могу это получить.

+0

У вас действительно есть две строки «имени»? – TCB13

+0

Вы пытаетесь декодировать массив $ _POST? – Highmastdon

ответ

2

Конечно, вы могли изобретать колесо, но вы явно работает со строкой запроса:

<?php 
    $str = '[email protected]_domain.com&name=Michael%20Linear'; 

    parse_str($str, $arr); 
    print_r($arr); 

выход:

Array 
(
    [email] => [email protected]_domain.com 
    [name] => Michael Linear 
) 
+0

приятный, единственная причина, по которой я не упоминал об этом, состоит в том, что он, похоже, имеет тот же ключ дважды. Если это намеренно (не должно быть), 'parse_str()' будет сохранять только последний. – hexblot

+0

@hexblot Рисунок, но стоит указать - либо OP имеет неправильную строку запроса, либо, иначе я работаю над предположением, что ключ 'name' был правильно закодирован как массив в первую очередь. – Emissary

+0

Казалось бы, сообщение было обновлено, поэтому в любое время появляется только 1 'name'? – Emissary

2

Простое разрушение вокруг символа = позволит вам выполнить цикл и проверить имя переменной.

Пример:

foreach($q as $item) { 
    $keyval = explode('=', $item); 
    switch($keyval[0]) { 
    case 'name': 
     // Do something, $keyval[1] is the value part 
     $name = urldecode($keyval[1]); 
     break; 
    case 'email': 

     break; 
    } 
} 

Примечание: + и %20 символы заменяются пробелами с помощью функции urldecode().

+0

Глядя на пример своих данных, будет два ключа «имя», и он потеряет первый, используя explode(); – TCB13

+1

- это то, что ему нужно реализовать внутри 'case 'name''. Код должен перезаписать '$ keyval'. Я только добавил часть 'name =', чтобы продемонстрировать специальные символы декодирования, используемые для транспорта. – hexblot

0

попробовать с помощью str_replace() заменить строку с индексом массива значения

echo $email =str_replace('email=', '','[email protected]_domain.com'); 
if(strpos('name=Michael+D+Linear', '+') !== false) { 
$f = str_replace('name=', '','name=Michael+D+Linear'); 
echo $fname = str_replace('+', ' ',$f); 
} 
if(strpos('name=Michael%20Linear', '%20') !== false) { 
$g =str_replace('name=', '','name=Michael%20Linear'); 
echo $name = str_replace('%20', ' ',$g); 
} 
Смежные вопросы