【问题标题】:PHP: Creating an associative array programmaticallyPHP:以编程方式创建关联数组
【发布时间】:2018-05-14 20:20:21
【问题描述】:

我有一个来自 3rd 方插件的返回字符串,它看起来像数组中的 var_dump。我正在尝试解析为有效的关联数组。查看各种示例并使用以下代码进行一些测试。最后一段演示了我遇到的问题。我正在尝试将数据解析为字符串,然后在我的数据字符串完成后以编程方式创建一个数组。当我在 $vegetables2 上执行 print_r 时,我得到:

Array([0] => “葫芦”=”40 千焦”,”朝鲜蓟”=”105 千焦”,”木薯”=”550 千焦”)

并且 echo $vegetables2["Artichoke"] 没有产生任何价值。有人可以指导我使用正确的语法来创建与前两个示例等效的数组吗?

//this works:
echo "From creating the entire array with a static string:<br/>";
$vegetables = array("Gourd"=>"40 kilojoules", "Artichoke"=>"105 kilojoules", "Cassava"=>"550 kilojoules");
echo "Artichoke: " . $vegetables["Artichoke"] . "<br/>";

//this works too
$vegetables1['Gourd'] = "40 kilojoules";
$vegetables1['Artichoke'] = "105 kilojoules";
$vegetables1['Cassava'] = "550 kilojoules";
echo "From creating one element at a time:<br/>";
echo "Artichoke: " . $vegetables1["Artichoke"] . "<br/>";

//this doesn't work
$strData = "\"Gourd\"=\"40 kilojoules\",";
$strData = $strData . "\"Artichoke\"=\"105 kilojoules\",";
$strData = $strData . "\"Cassava\"=\"550 kilojoules\"";
echo $strData ."<br/>";
$vegetables2 = array($strData);
print_r($vegetables2);
echo "Artichoke: " . $vegetables2["Artichoke"];

【问题讨论】:

  • 你能展示一个输入数据的例子吗?
  • 105 Kilojoule Artichoke 是我的 Flaming Lips 翻唱乐队的名字。
  • 这只是将你得到的整个字符串组成一个元素数组:$vegetables2 = array($strData); ... 请向我们展示你试图解析的 RAW 数据的示例。它将揭示许多寻求答案的途径。
  • 插件返回的输入数据是这样过来的: Array ( [Gourd] => 40 千焦 [Artichoke] => 105 千焦 [Casava] => 550 千焦) 键是没有用引号括起来,而是用括号括起来,并且没有逗号分隔键/值对。
  • 嗯,有这个:stackoverflow.com/questions/3531857/…,但如果可能的话,我宁愿不使用以 var_dump 格式生成输出的插件。

标签: php arrays associative


【解决方案1】:
$strData = "\"Gourd\"=\"40 kilojoules\",";
$strData = $strData . "\"Artichoke\"=\"105 kilojoules\",";
$strData = $strData . "\"Cassava\"=\"550 kilojoules\"";


$dd=str_replace('"','',"$strData");
$ff=explode(',',$dd);
foreach ($ff as $c)
{
$xx=explode('=',$c);
$vegetables2["$xx[0]"]=$xx[1];
}
print_r($vegetables2);
echo "Artichoke: " . $vegetables2["Artichoke"];

【讨论】:

  • 你不应该有'包围你的字符串吗?
  • 由于您的最终结果数组看起来与我的起始数组字符串完全一样,我该如何使用原始字符串?这段代码不这样做: $arrayString = "Array ( [Gourd] => 40 千焦 [Artichoke] => 105 千焦 [Cassava] => 550 千焦)"; $vegetables3 = $arrayString; print_r($vegetables3);回声“朝鲜蓟:”。 $vegetables3["朝鲜蓟"];
  • 此处准确写入第 3 方插件的返回值(数组或字符串)。
  • 我在上面加上了..这里又是:数组([葫芦] => 40 千焦耳 [朝鲜蓟] => 105 千焦耳 [木薯] => 550 千焦耳)
【解决方案2】:

这个字符串是你的输入:

“数组([葫芦] => 40 千焦 [洋蓟] => 105 千焦 [木薯] => 550 千焦)”

  1. 使用 strpos() 定位“(”
  2. 使用 strpos() 定位“)”
  3. 使用 substr() 获取 ( 和 ) 之间的内容
  4. 使用explode 将结果除以“[”出现的地方
  5. 使用 array() 开始一个新数组
  6. 使用 foreach 重新格式化每个部分
  7. 在出现“=>”的地方使用explode来分割每一块
  8. 使用修剪去除多余的字符(左右)
  9. 使用 $data[$key] = $value 根据自己的喜好创建一个新数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2015-02-25
    相关资源
    最近更新 更多