如何将ini格式的字符串解析为关联数组?

问题描述 投票:0回答:5

我正在尝试拆开这根绳子,

AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh

进入这样的数组

$lang_codes['chinese'] = "zh";

所以语言的名称是键,值是语言代码。这真的很简单,但我就是无法理解。我已经停止编程了,时间太长了,显然……

我尝试过在

\n
处爆炸,然后使用
foreach
,再次在
=
处爆炸,但我似乎无法按照我想要的方式将其拼凑在一起。

php arrays ini text-parsing string-parsing
5个回答
4
投票

我尝试过爆炸 然后使用 foreach,在“=”处再次爆炸

我认为这正是正确的做法。

$lines = explode("\n", $langs);
$lang_codes = array();

foreach ($lines as $line) {
    list ($lang, $code) = explode(" = ", $line, 2);
    $lang_codes[$lang] = $code;
}

如果您希望语言为小写,如您的示例 (

$lang_codes['chinese']
) 所示,您需要调用
strtolower
:

$lang_codes[strtolower($lang)] = $code;

有关这些函数的更多信息,请参阅 PHP 手册:


2
投票

虽然爆炸答案在技术上是正确的,但我立即认为您正在尝试解析 INI 文件。这是更简单的方法,可以完全满足您的要求。

<?php
$string = "AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh";

$array = array_change_key_case( parse_ini_string( $string ) );

echo $array['chinese'];

0
投票

也许你应该这样做:

$array = explode("\n" , $string);
$finalArray =array();
$foreach ($array as $value){
      $array2 = explode( ' = ', $value);
      $finalArray[$array2[1]] =  $array2[0];

}

0
投票
<?php 
$str ="AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh";

$arr  = explode("\n", $str);
$lang_mapped = array();

foreach ($arr as $line) {
    list ($lang, $code) = explode(" = ", $line, 2);
    $lang_mapped[$lang] = $code;
}
$arr = explode("\n", $str); 
echo "<pre>";
print_r($lang_mapped);
echo "</pre>";
?>

0
投票

您的输入字符串已经采用合法格式调用

ini
(初始化的缩写)。 从历史上看,它有利于以精简、语法精简的格式声明程序初始化数据。 PHP 有一个原生函数旨在解析这种数据格式 -
parse_ini_format()

ini 字符串/文件中内置了一些微妙的约定/规则(例如部分、注释、保留字和特殊字符等),因此如果您不了解这些,请研究该主题以避免潜在的错误创建或解析 ini 数据时。

要将所有键转换为小写并解析 ini 格式的字符串,请使用

strtolower()
,然后使用
parse_ini_string()
演示

$ini = <<<ini
AFRIKAANS = af
ALBANIAN = sq
AMHARIC = am
ARABIC = ar
ARMENIAN = hy
AZERBAIJANI = az
BASQUE = eu
BELARUSIAN = be
BENGALI = bn
BIHARI = bh
BULGARIAN = bg
BURMESE = my
CATALAN = ca
CHEROKEE = chr
CHINESE = zh
ini;

var_export(
    parse_ini_string(strtolower($ini))
);

输出:

array (
  'afrikaans' => 'af',
  'albanian' => 'sq',
  'amharic' => 'am',
  'arabic' => 'ar',
  'armenian' => 'hy',
  'azerbaijani' => 'az',
  'basque' => 'eu',
  'belarusian' => 'be',
  'bengali' => 'bn',
  'bihari' => 'bh',
  'bulgarian' => 'bg',
  'burmese' => 'my',
  'catalan' => 'ca',
  'cherokee' => 'chr',
  'chinese' => 'zh',
)
© www.soinside.com 2019 - 2024. All rights reserved.