从PHP中的复杂关联数组中检索数据

时间:2014-04-03 16:49:33

标签: php arrays

我处理从jotform小部件提交的数据 - 当我运行print_r($ _ POST)时,我得到以下数据

Array ( 
[formID] => 40923773875567 
[q1_clickTo] => Country: UNITED STATES
Province: Kentucky
Latitude: 37.568694
Longitude: -84.29632229999999
[website] => [simple_spc] => 40923773875567-40923773875567 
)

我需要帮助检索国家,省,纬度,经度和网站[simple_spc]数据

请帮助 - 谢谢

3 个答案:

答案 0 :(得分:1)

您遇到的问题是s1_clickTo中的数据是一个字符串。我建议您以其他格式获取数据,因为现在您必须自己解析它。

我会在新行explode()上使用\n(或\r\n,具体取决于实际格式),然后针对每个键/值,在:上展开或使用RegEx匹配。

答案 1 :(得分:0)

以这种方式访问​​它们。

echo $_POST['q1_clickTo'];
echo $_POST['website']['simple_spc'];

答案 2 :(得分:0)

用这样的闭包编写一些解析器可能会更好吗?

$a = array(
   'formID' => '40923773875567',
   'q1_clickTo' => "Country: UNITED STATES
Province: Kentucky
Latitude: 37.568694
Longitude: -84.29632229999999",
   'website' => array(
      'simple_spc' => '40923773875567-40923773875567'
   )
);

$trim  = function($v) { return trim($v); };
$float = function($v) { return (float) $v; };

$mapping = array(
   'spc' => array('website', function($v) { return $v['simple_spc']; }),
   'data' => array('q1_clickTo', function($v) {
      $data   = explode("\n", $v);
      $result = [];
      foreach ($data as $line) {
          $parts = explode(':', $line);
          $result[$parts[0]] = $parts[1];
      }
      return $result;
   }),
   'country' => array('Country', $trim),
   'longitude' => array('Longitude', $float),
   'latitude' => array('Latitude', $float),
   'province' => array('Province', $trim)
);

$result = [];
foreach ($mapping as $key => $value) {
   $info = $a[$value[0]];
   $info = $value[1]($info);
   if (!is_array($info)) {
       $result[$key] = $info;
   } else {
      foreach ($info as $infoKey => $infoValue) {
          $a[$infoKey] = $infoValue;
      }
   }
}
var_export($result);

这里的工作示例:http://sandbox.onlinephpfunctions.com/code/04f28278bb00b3ca0372d85a837537a2552bc248