如何在PHP中使用索引将字符串分解为数组?

时间:2019-04-18 06:41:21

标签: php

我有一个用以下字符分隔的PHP字符串:

$str = "var1,'Hello'|var2,'World'|";

我使用爆炸功能,将我的字符串分割成这样的数组:

$sub_str = explode("|", $str);

并返回:

$substr[0] = "var1,'hello'";
$substr[1] = "var2,'world'";

在这种情况下,是否有任何方法可以炸开数组中的$substr$substr的第一部分是数组索引,$substr的第二部分是变量?

示例:

$new_substr = array();
$new_substr["var1"] = 'hello';
$new_substr["var2"] = 'world';

当我打电话给$new_substr时,它只返回结果吗?

示例:

echo $new_substr["var1"];

然后返回:你好

4 个答案:

答案 0 :(得分:3)

尝试此代码:

$str = "var1,'Hello'|var2,'World'|";
$sub_str = explode("|", $str);
$array = [];
foreach ($sub_str as $string) {
   $data = explode(',', $string);
   if(isset($data[0]) && !empty($data[0])){
     $array[$data[0]] = $data[1];
   }
}

答案 1 :(得分:3)

您可以使用preg_match_all提取键和值,然后使用array_combine将它们放在一起:

$str = "var1,'Hello'|var2,'World'|";
preg_match_all('/(?:^|\|)([^,]+),([^\|]+(?=\||$))/', $str, $matches);
$new_substr = array_combine($matches[1], $matches[2]);
print_r($new_substr);

输出:

Array (
  [var1] => 'Hello'
  [var2] => 'World' 
)

Demo on 3v4l.org

答案 2 :(得分:2)

您可以使用explode()str_replace()函数。

步骤很简单:

1)用|将字符串分成两段,这将形成一个包含两个元素的数组。

2)循环遍历拆分后的数组。

3)根据需要替换单引号。

4)用逗号(,)替换foreach当前元素

5)现在,我们将键和值分隔开了。

6)将其追加到数组。

7)尽情享受!

代码:

<?php
$string = "var1,'Hello'|var2,'World'|";
$finalArray = array();
$asArr = explode('|', $string );
$find = ["'",];
$replace = [''];
foreach( $asArr as $val ){
 $val = str_replace($find, $replace, $val);
  $tmp = explode( ',', $val );
  if (! empty($tmp[0]) && ! empty($tmp[1])) {
   $finalArray[ $tmp[0] ] = $tmp[1];
  }
}
echo '<pre>';print_r($finalArray);echo '</pre>';

输出:

Array
(
    [var1] => Hello
    [var2] => World
)

See it live:

答案 3 :(得分:1)

尝试以下代码:

$str = "var1,'Hello'|var2,'World'|";
$sub_str = explode("|", $str);
$new_str = array();
foreach ( $sub_str as $row ) {
  $test_str = explode( ',', $row );
  if ( 2 == count( $test_str ) ) {
    $new_str[$test_str[0]] = str_replace("'", "", $test_str[1] );
  }
}
print $new_str['var1'] . ' ' . $new_str['var2'];

只需用逗号将$sub_str展开,然后从值中替换单引号即可提供预期的结果。