explode()到$ key => $ value对

时间:2013-04-12 08:36:41

标签: php

我有这个:

$strVar = "key value";

我想知道这件事:

array('key'=>'value')

我尝试使用explode(),但这给了我这个:

array('0' => 'key',
      '1' => 'value')

原始$ strVar已经是一个爆炸字符串的结果,我正在循环结果数组的所有值。

15 个答案:

答案 0 :(得分:43)

不要相信这可以在一次操作中完成,但这应该可以解决问题:

list($k, $v) = explode(' ', $strVal);
$result[ $k ] = $v;

答案 1 :(得分:7)

$end_array(
            [key0] => value0,
            [key1] => value1,
            [key2] => value2
            )

输出数组

import UIKit

extension UIApplication {
    var screenShot: UIImage?  { return keyWindow?.layer.screenShot }
}

extension CALayer {

    var screenShot: UIImage?  {
        UIGraphicsBeginImageContextWithOptions(frame.size, false, UIScreen.main.scale)
        if let context = UIGraphicsGetCurrentContext() {
            render(in: context)
            let screenshot = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return screenshot
        }
        return nil
    }
}

答案 2 :(得分:4)

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

$arr= array($key => $val);

修改 我的错误,使用拆分而不是爆炸但是:

  截至PHP 5.3.0,

split()函数已被弃用。依靠这个   功能非常沮丧

答案 3 :(得分:3)

你可以循环每一个字符串:

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

答案 4 :(得分:2)

试试这个

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

答案 5 :(得分:2)

$pairs = explode(...);
$array = array();
foreach ($pair in $pairs)
{
    $temp = explode(" ", $pair);
    $array[$temp[0]] = $temp[1];
}

但似乎很明显,只要您知道数组和explode。所以可能存在一些你没有给我们的约束。您可以更新您的问题以进行解释。

答案 6 :(得分:1)

另一行:

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

答案 7 :(得分:1)

你可以试试这个:

$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;
       }
  }
}

我知道,这似乎很复杂,但确实有效;)

答案 8 :(得分:0)

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

    $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);

$array将奇怪定位的单词定位为key,并将单词$value均匀定位。

答案 9 :(得分:0)

如果你有一长串由同一个字符分隔的键值对,这个键也分隔了键和值,那么这个函数可以解决这个问题。

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;
}

示例:

$pairs = extractKeyValuePairs('one foo two bar three baz');

[
    'one'   => 'foo',
    'two'   => 'bar',
    'three' => 'baz',
]

答案 10 :(得分:0)

list($array["min"], $array["max"]) = explode(" ", "key value");

答案 11 :(得分:0)

如果字符串中包含更多值,则可以使用array_walk()创建一个新数组,而不用foreach()for()进行循环。 我正在使用仅适用于PHP 5.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
)

答案 12 :(得分:0)

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

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,
];

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

$props = [
    'tic' => 4,
    'tac' => 5,
    'toe' => 6,
];

我的两分钱

答案 13 :(得分:-1)

ya的单行:

$arr = array(strtok($strVar, " ") => strtok(" "));

答案 14 :(得分:-2)

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

$a = array_flip(explode(' ', $strVal));