Php 将()分解为$key=>$值对

Php 将()分解为$key=>$值对,php,Php,我有这个: $strVar = "key value"; 我想把它放在这里: array('key'=>'value') 我用explode()试过了,但结果是: array('0' => 'key', '1' => 'value') 原来的$strVar已经是一个分解字符串的结果,我正在循环遍历结果数组的所有值 $strVar = "key value"; list($key, $val) = explode(' ', $strVar); $arr= ar

我有这个:

$strVar = "key value";
我想把它放在这里:

array('key'=>'value')
我用explode()试过了,但结果是:

array('0' => 'key',
      '1' => 'value')
原来的$strVar已经是一个分解字符串的结果,我正在循环遍历结果数组的所有值

$strVar = "key value";
list($key, $val) = explode(' ', $strVar);

$arr= array($key => $val);
编辑: 我的错误,使用了拆分而不是爆炸,但是:

从PHP 5.3.0开始,split()函数已被弃用。依靠这个 这项功能非常不受欢迎


您可以每秒钟循环一次字符串:

$how_many = count($array);
for($i = 0; $i <= $how_many; $i = $i + 2){
  $key = $array[$i];
  $value = $array[$i+1];
  // store it here
}
$how_many=count($array);
对于($i=0;$i试试这个

$str = explode(" ","key value");
$arr[$str[0]] = $str[1];

不要相信这在一次操作中是可能的,但这应该可以做到:

list($k, $v) = explode(' ', $strVal);
$result[ $k ] = $v;
但是,如果您似乎了解数组和
explode
,这一点似乎很明显。因此,可能存在一些您没有给我们的限制。您可以更新您的问题以进行解释。

请看一行:

$arr = array(strtok($strVar, " ") => strtok(" "));
另一行:

parse_str(str_replace(' ', '=', $strVar), $array);

如果字符串中有两个以上的单词,请使用以下代码

    $values = explode(' ', $strVar);

    $count = count($values);
    $array = [];

    for ($i = 0; $i < $count / 2; $i++) {
        $in = $i * 2;
        $array[$values[$in]] = $values[$in + 1];
    }

    var_dump($array);
$values=explode(“”,$strVar);
$count=计数($value);
$array=[];
对于($i=0;$i<$count/2;$i++){
$in=$i*2;
$array[$values[$in]]=$values[$in+1];
}
变量转储($数组);

$array
分别将位置奇怪的单词作为
键和位置均匀的单词
$value

我找到了另一种简单的方法:

$a = array_flip(explode(' ', $strVal));
您可以尝试以下方法:

$keys = array();
$values = array();

$str = "key value"; 
$arr = explode(" ",$str);

foreach($arr as $flipper){
   if($flipper == "key"){
      $keys[] = $flipper;
   }elseif($flipper == "value"){
      $values[] = $flipper;
   }
}

$keys = array_flip($keys);
// You can check arrays with
//print_r($keys);
//print_r($values);

foreach($keys as $key => $keyIndex){
  foreach($values as $valueIndex => $value){
       if($valueIndex == $keyIndex){
          $myArray[$key] = $value;
       }
  }
}

我知道,它看起来很复杂,但很有效;)

如果您有一长串键值对,这些键值对由同一个字符分隔,该字符也会分隔键值,那么这个函数就完成了

function extractKeyValuePairs(string $string, string $delimiter = ' ') : array
{
    $params = explode($delimiter, $string);

    $pairs = [];
    for ($i = 0; $i < count($params); $i++) {
        $pairs[$params[$i]] = $params[++$i];
    }

    return $pairs;
}

如果字符串中有更多值,可以使用
array\u walk()
创建新数组,而不是使用
foreach()
for()
循环。 我使用的匿名函数只适用于PHP5.3+

// your string
$strVar = "key1 value1&key2 value2&key3 value3";

// new variable for output
$result = array();

// walk trough array, add results to $result
array_walk(explode('&', $strVar), function (&$value,$key) use (&$result) {
    list($k, $v) = explode(' ', $value);
    $result[$k] = $v;
});

// see output
print_r($result);
这使得:

Array
(
    [key1] => value1
    [key2] => value2
    [key3] => value3
)

我正在构建一个应用程序,其中一些信息存储在一个键/值字符串中

tic/4/tac/5/toe/6

我正在寻找一些很好的解决方案来从这些字符串中提取数据,我在这里遇到了,过了一段时间,我得到了这个解决方案:

$tokens = explode('/', $token);

if (count($tokens) >= 2) {
    list($name, $val) = $tokens;
    $props[$name] = $val;
}

if (count($tokens) >= 4) {
    list(, , $name, $val) = $tokens;
    $props[$name] = $val;
}

if (count($tokens) >= 6) {
    list(, , , , $name, $val) = $tokens;
    $props[$name] = $val;
}

// ... and so on
受smassey解决方案的自由启发

此代码段将生成以下类型的数组:

$props = [
    'tic' => 4,
];


我的两分钱

为什么不直接用
explode()
结果创建数组呢?然后执行
$myArray[$ar[0]]=$ar[1]
其中
$ar
是分解的字符串。不,没有约束,我只是在寻找一个“单行代码”解决方案:-)谢谢,这种方法可以更有效地使用mem。提示:当
foreach
使用此递归生成大型数组时,您可以在填充
$result
unset()
原始/源数组。这将削减内存。也就是说,当从[crappy]txt文件解析Google购物类别时,会使用
file()
在每行字符串上创建一个临时数组,然后使用
explode()
来隔离一个ID作为键。源数组有5425行包含字符串。该数组是~1mb,它的临时值,nuke it:)值在
$result
中的存储方式?此答案和其他答案似乎只适用于一个值和一个键。@AnujTBE$result是作为赋值的结果创建的。这将为您提供
数组(键=>0,值=>1)
。OP需要
数组(key=>value)
。欢迎使用SO。你能解释一下为什么你认为这是正确的答案吗?这个答案是正确的,最好与
foreach()
很好的答案一起使用,泰。如果被否决的选民能详细说明他被否决的原因,也许我们能学到一些东西……而不是我的否决票,但这只是一个代码式的答案,这些类型的答案对未来读者的教育作用甚微。如果您想获得代表积分,请改进您的答案,包括解释为什么这是一种合适的方法以及它是如何工作的。(我知道它是如何工作的顺便说一句)请添加一些描述来解释答案,以利于其他人。
list($array["min"], $array["max"]) = explode(" ", "key value");
// your string
$strVar = "key1 value1&key2 value2&key3 value3";

// new variable for output
$result = array();

// walk trough array, add results to $result
array_walk(explode('&', $strVar), function (&$value,$key) use (&$result) {
    list($k, $v) = explode(' ', $value);
    $result[$k] = $v;
});

// see output
print_r($result);
Array
(
    [key1] => value1
    [key2] => value2
    [key3] => value3
)
$tokens = explode('/', $token);

if (count($tokens) >= 2) {
    list($name, $val) = $tokens;
    $props[$name] = $val;
}

if (count($tokens) >= 4) {
    list(, , $name, $val) = $tokens;
    $props[$name] = $val;
}

if (count($tokens) >= 6) {
    list(, , , , $name, $val) = $tokens;
    $props[$name] = $val;
}

// ... and so on
$props = [
    'tic' => 4,
];
$props = [
    'tic' => 4,
    'tac' => 5,
];
$props = [
    'tic' => 4,
    'tac' => 5,
    'toe' => 6,
];