如何从 PHP 中的文本生成关联数组?

How to generate an associate array from text in PHP?

我一直在 php 的 explode() 函数的帮助下使用逗号 ,(或任何其他特殊字符)从纯文本创建数组

$rawPhoneNumber = "800-555-5555"; 
$phoneChunks = explode("-", $rawPhoneNumber);
echo "Raw Phone Number = $rawPhoneNumber <br />";
echo "First chunk = $phoneChunks[0]<br />";
echo "Second chunk = $phoneChunks[1]<br />";
echo "Third Chunk chunk = $phoneChunks[2]";

但是如何创建关联数组?比如我怎样才能创建一个像

这样的数组
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

来自 "Peter=>35,Ben=>37,Joe=>43"

这样的纯文本

您的输入格式足够接近 PHP 本机格式,建议 eval:

$ages = eval('return array(' . file_get_contents('ages.txt') . ');');
print_r($ages);

示例:

$ cat ages.txt
Peter=>35,Ben=>37,Joe=>43
$ php example.php
Array
(
    [Peter] => 35
    [Ben] => 37
    [Joe] => 43
)

但出于安全和性能原因,您最好使用 string manipulation


如果您想使用 PHP 数据结构将数据保存在文件中,我建议您使用 var_export 并稍后写入文件 include:

$ages = array ('Peter' => 35, 'Ben' => 37 );
file_put_contents('ages.php', '<?php return ' . var_export($ages, true) . ';');

$readback = include('ages.php');
print_r($readback);

示例:

$ php example.php
Array
(
    [Peter] => 35
    [Ben] => 37
)
$ cat ages.php
<?php return array (
  'Peter' => 35,
  'Ben' => 37,
);

P.S.: eval 是邪恶的,但邪恶不是自动否决票!

我相信还有更优雅的方法,但是...这也应该有效。

$str='Peter=>35,Ben=>37,Joe=>43';
$arr=explode(',',$str);
$final=array();
foreach ($arr as $value) {
$val=explode('=>',$value);  
$final[$val[0]]=$val[1];    

}

print_r($final);
    <?php

$rawPhoneNumber = "800-555-5555"; 
$phoneChunks = explode("-", $rawPhoneNumber);

$myarray['Raw Phone Number'] = $rawPhoneNumber;
$myarray['First chunk'] = $phoneChunks[0];
$myarray['Second chunk'] = $phoneChunks[0];
$myarray['Second chunk'] = $phoneChunks[0];
$myarray['Third chunk'] = $phoneChunks[0];

Result:
echo "<pre>";
print_r($myarray);
echo "</pre>";

?>

------------认为这对你有用----------------

<?php

$样本="Peter=>35,Ben=>37,Joe=>43"; $row_chunks = explode(",", $sample);

foreach ($row_chunks as $value) 
{
    $row_chunks = explode("=>", $value);
    $myarray[$row_chunks[0]]=$row_chunks[1];
}

echo "<pre>";
print_r($myarray);
echo "</pre>";
?>

看你的情况,这个可行

<?php
$content = 'Peter=>35,Ben=>37,Joe=>43';
$arr = explode(',',implode(',',explode('=>',$content)));
$assoArray = Array();
for($i =0; $i < sizeof($arr); $i +=2)
{
    $assoArray[$arr[$i]] = $arr[$i +1];
}
print_r($assoArray);
?>

您可以使用 , array_walk, foreach with an explode,甚至 strtok:

$input = 'Peter=>35,Ben=>37,Joe=>43';
$array = array ();

$part = strtok($input, ',');
while (false !== $part) {
    list ($name, $age) = explode('=>', $part);
    $array[$name] = $age;
    $part = strtok(',');
}

print_r($array);

执行此操作的复杂方法几乎没有尽头。

见鬼,为什么不呢。使用 array_column 和朋友的两行 PHP 5.5+ 解决方案:

$input  = 'Peter=>35,Joe=>37';

$chunks = array_chunk(preg_split('/(=>|,)/', $input), 2);
$result = array_combine(array_column($chunks, 0), array_column($chunks, 1));

print_r($result);

Array
(
    [Peter] => 35
    [Joe] => 37
)