Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php字符串捕获特定字符串和值_Php - Fatal编程技术网

从php字符串捕获特定字符串和值

从php字符串捕获特定字符串和值,php,Php,我在php中有一个变量,其值如下: var $line="'PHYSICAL':3.8,'ORGANIZATIONAL':4,'TECHNICAL':2.9"; 从该行变量中,我希望提取php中的每个单词和值,因此基本上我希望如下所示: var $word1=PHYSICAL; var $word1value=3.8; var $word2=ORGANIZATIONAL; var $word2value=4; var $word3=TECHNICAL; var $word3value=2.9

我在php中有一个变量,其值如下:

var $line="'PHYSICAL':3.8,'ORGANIZATIONAL':4,'TECHNICAL':2.9"; 
从该行变量中,我希望提取php中的每个单词和值,因此基本上我希望如下所示:

var $word1=PHYSICAL;
var $word1value=3.8;
var $word2=ORGANIZATIONAL;
var $word2value=4;
var $word3=TECHNICAL;
var $word3value=2.9;

我想在不同的变量中分别捕获所有的单词和值,以便以后可以处理它们。有谁能在这方面帮助我吗。谢谢

最简单的方法是使用。您可以使用
PREG\u SPLIT\u DELIM\u CAPTURE
标志来启用在不使用周围引号的情况下捕获单词,并使用
PREG\u SPLIT\u NO\u EMPTY
来删除此特定拆分模式产生的空值

$line="'PHYSICAL':3.8,'ORGANIZATIONAL':4,'TECHNICAL':2.9"; 
$array = preg_split("/'([^']+)':|,/", $line, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
print_r($array);
输出:

Array
(
    [0] => PHYSICAL
    [1] => 3.8
    [2] => ORGANIZATIONAL
    [3] => 4
    [4] => TECHNICAL
    [5] => 2.9
)
Array
(
    [PHYSICAL] => 3.8
    [ORGANIZATIONAL] => 4
    [TECHNICAL] => 2.9
)
word1 = PHYSICAL
word1value = 3.8
word2 = ORGANIZATIONAL
word2value = 4
word3 = TECHNICAL
word3value = 2.9
然后可以对数组进行后处理(例如使用and)以生成可能更有用的内容:

$newarray = array_combine(array_filter($array, function ($i) { return !($i % 2); }, ARRAY_FILTER_USE_KEY),
                          array_filter($array, function ($i) { return $i % 2; }, ARRAY_FILTER_USE_KEY));
print_r($newarray);
输出:

Array
(
    [0] => PHYSICAL
    [1] => 3.8
    [2] => ORGANIZATIONAL
    [3] => 4
    [4] => TECHNICAL
    [5] => 2.9
)
Array
(
    [PHYSICAL] => 3.8
    [ORGANIZATIONAL] => 4
    [TECHNICAL] => 2.9
)
word1 = PHYSICAL
word1value = 3.8
word2 = ORGANIZATIONAL
word2value = 4
word3 = TECHNICAL
word3value = 2.9
如果您确实需要单个变量,可以执行以下操作:

for ($i = 0; $i < count($array); $i += 2) {
    ${'word' . intdiv($i+2, 2)} = $array[$i];
    ${'word' . intdiv($i+2, 2) . 'value'} = $array[$i+1];
}
echo "word1 = $word1\n";
echo "word1value = $word1value\n";
echo "word2 = $word2\n";
echo "word2value = $word2value\n";
echo "word3 = $word3\n";
echo "word3value = $word3value\n";

你不能只用数组吗?嗨,非常感谢。这个很好用。谢谢你的帮助。太好了,很高兴能帮忙。我还(因为你接受答案时我正在打字)添加了一种方法来获取你在问题中描述的各个变量。