【问题标题】:explode() into $key=>$value pairexplode() 变成 $key=>$value 对
【发布时间】:2013-04-12 08:36:40
【问题描述】:

我有这个:

$strVar = "key value";

我想把它放进去:

array('key'=>'value')

我用explode() 试过了,但结果是这样的:

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

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

【问题讨论】:

  • 为什么不直接从explode() 结果中创建数组?
  • 然后执行$myArray[$ar[0]] = $ar[1]; 其中$ar 是分解后的字符串。

标签: php


【解决方案1】:

不要相信这在单个操作中是可能的,但这应该可以解决问题:

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

【讨论】:

  • 谢谢,这种方式内存使用效率更高。提示:当foreach 使用此递归创建大数组时,您可以在填充$resultunset() 原始/源数组。这将修剪内存。即,当从他们的 [crappy] txt 文件中解析 Google 购物类别时,使用file() 然后在每个行字符串上使用explode() 创建一个临时数组,以隔离一个 ID 作为键。源数组有 5425 行包含字符串。该数组约为 1mb,它是临时的,核对它 :)
  • 值如何存储在$result中?
  • 这个和其他答案似乎只适用于一个值和一个键。
  • @AnujTBE $result 是分配的结果。
  • 这是我第一次使用 list 作为 8 年的 php 经验
【解决方案2】:
$my_string = "key0:value0,key1:value1,key2:value2";

$convert_to_array = explode(',', $my_string);

for($i=0; $i < count($convert_to_array ); $i++){
    $key_value = explode(':', $convert_to_array [$i]);
    $end_array[$key_value [0]] = $key_value [1];
}

输出数组

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

【讨论】:

  • 欢迎来到 SO。请您解释一下为什么您认为这是正确答案?
  • 这个答案是正确的,最好和foreach()一起使用
  • 不错的答案,你。
【解决方案3】:

试试这个

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

【讨论】:

    【解决方案4】:
    list($array["min"], $array["max"]) = explode(" ", "key value");
    

    【讨论】:

    • 请添加一些描述以解释其他人的利益。
    【解决方案5】:

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

        $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

    【讨论】:

      【解决方案6】:

      你可以试试这个:

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

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

      【讨论】:

        【解决方案7】:

        另外一行:

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

        【讨论】:

          【解决方案8】:
          $strVar = "key value";
          list($key, $val) = explode(' ', $strVar);
          
          $arr= array($key => $val);
          

          编辑: 我的错误,使用 split 而不是 explode 但是:

          split() 函数自 PHP 5.3.0 起已弃用。以此为依托 非常不鼓励使用该功能

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:
              $pairs = explode(...);
              $array = array();
              foreach ($pair in $pairs)
              {
                  $temp = explode(" ", $pair);
                  $array[$temp[0]] = $temp[1];
              }
              

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

              【讨论】:

              • 不,没有限制,我只是在寻找“单行代码”解决方案 :-)
              【解决方案11】:

              如果您有一长串由相同字符分隔的键值对列表,该字符也分隔键和值,则此函数可以解决问题。

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

              【讨论】:

                【解决方案12】:

                如果字符串中有更多值,可以使用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
                )
                

                【讨论】:

                  【解决方案13】:

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

                  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 解决方案的启发

                  这个sn-p会产生以下几种数组:

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

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

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

                  我的两分钱

                  【讨论】:

                    【解决方案14】:

                    你的单行:

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

                    【讨论】:

                    • 如果投反对票的人可以详细说明他投反对票的原因,也许我们可以学到一些东西......
                    • 不是我的反对意见,但这是一个纯代码的答案,这些类型的答案对教育未来的读者几乎没有什么作用。如果您想获得代表点数,请改进您的答案,包括解释为什么这是一种合适的方法以及它是如何工作的。 (顺便说一句,我知道它是如何工作的)
                    【解决方案15】:

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

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

                    【讨论】:

                    • 这会给你array(key =&gt; 0, value =&gt; 1)。 OP 想要array(key =&gt; value)
                    猜你喜欢
                    • 2015-05-20
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-03-23
                    • 2015-10-12
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多