2014-09-08 3 views
0

У меня есть строка в поле таблицы, выглядит следующим образом:PHP отдельный массив запятой в переменный/значении

part1=1,part2=S,part3=Y,part4=200000 

Для вызова из таблицы я делаю это:

while($row = mysqli_fetch_array($result)) { 


     $row['mystring']; 


} 

Моей проблемы является то, что мне нужно, чтобы отделить части в переменных, например:

Отсюда:

part1=1,part2=S,part3=Y,someothername=200000 

Для этого:

$part1 = '1'; 
$part2 = 'S'; 
$part3 = 'Y'; 
$someothername = '200000'; 

Как я могу это сделать?

ответ

0

Вы можете использовать что-то под названием 'Переменные переменные'. Вы можете объявить содержимое переменной как переменной, если вы используете знак двойного доллара, а не один. Например:

$fruit = "apple"; 
$$fruit = "this is the apple variable"; 
echo $apple; 

Было бы вывести следующее:

это яблоко переменная

Вы должны быть немного сложнее с определением переменных из массива, как вы 'd должен enclode исходная переменная в фигурных скобках.(Например: ${$fruit[0]})

Таким образом, ответ на ваш вопрос:

$parts = "part1=1,part2=S,part3=Y,someothername=200000"; 
$parts_array = explode(",", $parts); 
foreach ($parts_array as $value) { 
    $temp = explode("=", $value); 
    ${$temp[0]} = $temp[1]; 
} 
echo "$part1, $part2, $part3, $someothername"; 

PHPFiddle ссылка: http://phpfiddle.org/main/code/adyb-ug5n

1

Первый раскол строка:

$s = "part1=1,part2=S,part3=Y,part4=200000"; 
$a = explode(",",$s); 

затем Еогеасп часть строки ("part1 = 1" ...) создать массив и взрываются переменной:

foreach($a as $k=>$v) 
{ 
$tmp = explode("=",$v); 
$tmp = array($tmp[0]=>$tmp[1]); 
extract($tmp); 
} 
echo $part1; 
1

Двойной explode вашей строки в получить желаемое поле:

$string ="part1=1,part2=S,part3=Y,someothername=200000"; 

foreach (explode(',', $string) as $parts) { 
    $part = explode('=', $parts); 
    $array[$part[0]] = $part[1]; 
} 

var_dump($array); 

Выход:

array(4) { 
    ["part1"]=> 
    string(1) "1" 
    ["part2"]=> 
    string(1) "S" 
    ["part3"]=> 
    string(1) "Y" 
    ["someothername"]=> 
    string(6) "200000" 
} 

Я не хотел бы предложить использование переменных величин, чтобы получить выход как:

$part1 = ... 
$part2 = ... 

Используя массив, вероятно, проще и безопасный способ сделать здесь. Как было предложено в моем комментарии, он избегает потенциальных конфликтов с именами переменных.

+0

You мог бы использовать extract() в конце, чтобы получить ваши переменные, но я бы также придерживался массива –

+0

@DavidJones True, я должен был указать, что в этом случае, лучше избегать прямого указания переменных, чтобы избежать возможных конфликтов с уже существующими переменными с тем же именем. – Sugar

+0

Да, это правда, я согласен с тобой в сохранении массива, но требуемые переменные OP :) –

6

Используйте как этот

parse_str(str_replace(",", "&", "part1=1,part2=S,part3=Y,someothername=200000")); 

использования с там называют, как:

$part1 // return 1 
$part2 // return S 
$part3 // return Y 

работает, как вы хотите, увидеть demo

+0

Это действительно элегантный однострочный. Мне нравится больше, чем мой собственный ответ! –

+0

@TiborB. спасибо моему другу :), приветствует –

1

Если вы используете PHP 5.3+ вы можете использовать array_map

<?php 

$string = 'part1=1,part2=S,part3=Y,part4=200000'; 

array_map(function($a){ 
    $tmp = explode('=', $a, 2); 
    global ${$tmp[0]}; //make vars available outside of this function scope 
    ${$tmp[0]} = $tmp[1]; 
}, explode(',', $string)); 

//Variables available outside of array_map scope 
echo $part1 . '<br>'; 
echo $part2 . '<br>'; 
echo $part3 . '<br>'; 
echo $part4 . '<br>'; 

?> 
Смежные вопросы