如何在php中将字符串转换为数组

3
我有一个像这样的字符串:string
food_item => 'Butter Croissant',food_id => '1',quantity => '1',price => '140'

我尝试了"explode"选项,但我得到的数组长这样:
Array
(
    [0] => 'food_item' => 'Butter Croissant'
    [1] => 'food_id' => '1'
    [2] => 'quantity' => '1'
    [3] => 'price' => '140'
)

但我需要将它作为一个数组,如下所示:
Array
(
    [food_item] =>  'Butter Croissant'
    [food_id]   =>  '1'
    [quantity]  =>  '1'
    [price]     =>  '140'
)

我该如何做这个?有人可以帮帮我吗?

提前感谢您的帮助。


你的第一个“string”是一个数组,而不是字符串。 - Andy Holmes
也许他把它作为字符串了... - Ivan
也许吧,但有点令人困惑。 - Andy Holmes
如果你使用逗号将字符串分割,那么字符串的一部分 "food_item => 'Butter Croissant'" 将被视为一个字符串。 - Aswathy S
食品名称中如果包含了逗号 , 会怎么样? - Salman A
5个回答

4

尝试:

$str = "food_item => 'Butter Croissant',food_id => '1',quantity => '1',price => '140'";
$mainArray = explode(",",$str);
$newArray = array();
foreach($mainArray as $main) {
  $innerArray = explode("=>",$main);
  $newArray[trim($innerArray[0])] = trim($innerArray[1]);
}

输出:

Array
(
    [food_item] => 'Butter Croissant'
    [food_id] => '1'
    [quantity] => '1'
    [price] => '140'
)

感谢您的回答.. :) - Suganya Rajasekar

2
您可以按照以下方式进行操作:-
<?php
$string = "food_item => 'Butter Croissant',food_id => '1',quantity => '1',price => '140'"; // original string

$first_array = explode(',',$string); // your first explode with `,`

$final_array = array(); // create a new empty array

foreach($first_array as $arr){ // iterate over previously exploded array
    $data = explode('=>',$arr); // now explode the value again with `=>`
    $final_array[trim($data[0])] = trim($data[1]);  // add it to final array in the form of key=>value pair
}

echo "<pre/>";print_r($final_array);

输出:-https://eval.in/609356

注意:这是最容易做到并且也很容易理解的东西。谢谢。


@SuganyaRajasekar 很高兴能帮助你。 - Alive to die - Anant
@ Anant 是的,我做到了 :) - Suganya Rajasekar
注意字符串中的逗号。我建议使用正则表达式。你在 $string = "food_item => 'Butter, Croissant'... 遇到了问题。 - Ron van der Heijden

1
你可以使用这个:

$str = "food_item => 'Butter Croissant',food_id => '1',quantity => '1',price => '140'";
$exploded = array_map('myExplode', explode(',', $str));
$result = [];
foreach ($exploded as $itemPieces) {
    $result[trim($itemPieces[0])] = trim($itemPieces[1]);
}

function myExplode($item) {
    return explode("=>", str_replace("'", '', $item));
}

var_dump($result);

输出

array (size=4)
  'food_item' => string 'Butter Croissant' (length=16)
  'food_id' => string '1' (length=1)
  'quantity' => string '1' (length=1)
  'price' => string '140' (length=3)

1
你可以使用preg_splitforeach循环结合起来实现这个功能,代码如下:
    <?php
        $strArray       = "food_item => 'Butter Croissant',food_id => '1',quantity => '1',price => '140'";
        $arrKVPairs     = preg_split("#,\s?#", $strArray);
        $arrStrToArray  = array();

        foreach($arrKVPairs as $ikey=>$strData){
            $arrKeyVal      = preg_split("#\s?\=>\s?#", trim($strData, "'"));
            if(count($arrKeyVal) == 2){
                list($key, $val)        = $arrKeyVal;
                $arrStrToArray[$key]    = trim($val, "'");
            }
        }
        var_dump($arrStrToArray);
        // PRODUCES::

        array (size=4)
          'food_item' => string 'Butter Croissant' (length=16)
          'food_id' => string '1' (length=1)
          'quantity' => string '1' (length=1)
          'price' => string '140' (length=3)

1

既然已经有了答案,我想发布一个不同的解决方案(给定的字符串很像可以通过parse_str函数解析为数组或变量的参数字符串):

$string = "food_item => 'Butter Croissant',food_id => '1',quantity => '1',price => '140'";

$paramString = str_replace([',', " => ", "'"], ['&', '=', ''], $string);

parse_str($paramString, $data);

现在我们已经获得了所需的数据,代码看起来更加简洁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接