如何从 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
)
我一直在 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
)