为了账号安全,请及时绑定邮箱和手机立即绑定

如何将此字符串转换为键值数组?

如何将此字符串转换为键值数组?

PHP
隔江千里 2021-11-05 14:32:08
我有一个像下面这样的字符串,包括括号:("string" "value" "string" "value" "string" "value" ...)引用部分的数量是未知的,最少一对,我想把它变成一个关联数组,我想要的结果是:array('string'=>$value,'string'=>$value, 'string'=>$value)我怎么能这样做?最好,我想使用内置函数或单衬或创建自定义函数,任何帮助将不胜感激。
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

如何使用内置函数:)


$str = '("string" "value" "string1" "value1" "string2" "value2")';


$str = preg_replace('~^\("|"\)$~', '', $str);

$ar = explode('" "', $str);

$ar = array_chunk($ar,2);

$ar = array_column($ar, 1, 0);

print_r($ar);


查看完整回答
反对 回复 2021-11-05
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

<?php


$str='("foo" "bar" "ying" "yang" "apple" "orange")';


$cols    = str_getcsv(trim($str, '()'), ' ');

$chunked = array_chunk($cols, 2);

$result  = array_column($chunked, 1, 0);


var_dump($cols, $chunked, $result);

输出:


array(6) {

    [0]=>

    string(3) "foo"

    [1]=>

    string(3) "bar"

    [2]=>

    string(4) "ying"

    [3]=>

    string(4) "yang"

    [4]=>

    string(5) "apple"

    [5]=>

    string(6) "orange"

  }

  array(3) {

    [0]=>

    array(2) {

      [0]=>

      string(3) "foo"

      [1]=>

      string(3) "bar"

    }

    [1]=>

    array(2) {

      [0]=>

      string(4) "ying"

      [1]=>

      string(4) "yang"

    }

    [2]=>

    array(2) {

      [0]=>

      string(5) "apple"

      [1]=>

      string(6) "orange"

    }

  }

  array(3) {

    ["foo"]=>

    string(3) "bar"

    ["ying"]=>

    string(4) "yang"

    ["apple"]=>

    string(6) "orange"

  }


查看完整回答
反对 回复 2021-11-05
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

一种方法是匹配一对带引号的字符串的模式,然后使用匹配中的两个字符串在回调函数中填充结果数组。


preg_replace_callback('/"([^"]+)" "([^"]+)"/', function($match) use (&$result) {

    $result[$match[1]] = $match[2];

}, $str);


查看完整回答
反对 回复 2021-11-05
  • 3 回答
  • 0 关注
  • 210 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信