【问题标题】:create multidimensional array from php select从 php 选择创建多维数组
【发布时间】:2015-12-21 13:09:11
【问题描述】:
while ($selected_row = $stmt - > fetch(PDO::FETCH_ASSOC)) {
    $tmp_key = $selected_row['tin']; //adding a temp key
    //$tmp_key = $selected_row['tin']; //adding a temp key
    $new_data[$tmp_key]['tin'] = $selected_row['ownertin'];
    $new_data[$tmp_key]['lastname'] = $selected_row['ownerlastname'];
    $new_data[$tmp_key]['firstname'] = $selected_row['ownerfirstname'];
    $new_data[$tmp_key]['ownershipfrom'] = $selected_row['ownershipfrom'];
    $new_data[$tmp_key]['type'] = $selected_row['ownership'];
    $new_data[$tmp_key]['middleinitial'] = $selected_row['ownermiddlename'];
    $new_data[$tmp_key]['suffix'] = $selected_row['ownersuffix'];

    $sudky = (isset($new_data[$tmp_key]['Address'])) ? count($new_data[$tmp_key]['Address']) : 0; //getting the key for student child array

    $new_data[$tmp_key]['Address'][$sudky]['contactflag'] = $selected_row['contact_flag'];
    $new_data[$tmp_key]['Address'][$sudky]['tin'] = $selected_row['ownertin'];
    $new_data[$tmp_key]['Address'][$sudky]['mobile'] = $selected_row['mobile'];
    $new_data[$tmp_key]['Address'][$sudky]['landline'] = $selected_row['landline'];
    $new_data[$tmp_key]['Address'][$sudky]['email'] = $selected_row['email'];
    $new_data[$tmp_key]['Address'][$sudky]['province'] = $selected_row['addressprovince'];
    $new_data[$tmp_key]['Address'][$sudky]['municipality'] = $selected_row['addressmunicipality'];
    $new_data[$tmp_key]['Address'][$sudky]['barangay'] = $selected_row['addressbarangay'];
    $new_data[$tmp_key]['Address'][$sudky]['street'] = $selected_row['addressstreet'];
    $new_data[$tmp_key]['Address'][$sudky]['zipcode'] = $selected_row['addresszipcode'];

}
$new_data = array_values($new_data);
$input = array_map("unserialize", array_unique(array_map("serialize", $new_data)));
//print_r($new_data);
echo json_encode($new_data, JSON_UNESCAPED_UNICODE);

有没有更好的方法来创建这个多维数组而没有重复的地址

【问题讨论】:

  • 您可以使用PDO::* 获取并返回多维数组。
  • 你能编辑和添加你的表结构吗?
  • 你如何使用 pdo 来做到这一点,在@EliasNicolas 之前我从未这样做过
  • 看到这个php.net/manual/en/pdostatement.fetchall.php,它应该一次全部获取,使用fetch_style标志添加PDO::FETCH_ASSOC|PDO::FETCH_GROUP并在MYSQL中使用Group by...然后你可以做foreach()
  • 我现在无法对其进行测试,但我会尽快回复此评论,谢谢您的想法

标签: php mysql arrays multidimensional-array pdo


【解决方案1】:

我更喜欢这种构建数组的结构,因为(至少对我而言)它更清楚什么在哪里。

$new_data = array();
while($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $tmp_key = $selected_row['tin'];
    // don't write the same data over and over again
    if(!isset($newData[$tmp_key])) {
        $newData[$tmp_key] = array(
            'tin'           => $selected_row['ownertin'],
            'lastname'      => $selected_row['ownerlastname'],
            'firstname'     => $selected_row['ownerfirstname'],
            'ownershipfrom' => $selected_row['ownershipfrom'],
            'type'          => $selected_row['ownership'],
            'middleinitial' => $selected_row['ownermiddlename'],
            'suffix'        => $selected_row['ownersuffix'],
            'Address'       => array()
        );
    }
    $newData[$tmp_key]['Address'][$selected_row['contact_flag']] = array(
        'contactflag'  => $selected_row['contact_flag'],
        'tin'          => $selected_row['ownertin'],
        'mobile'       => $selected_row['mobile'],
        'landline'     => $selected_row['landline'],
        'email'        => $selected_row['email'],
        'province'     => $selected_row['addressprovince'],
        'municipality' => $selected_row['addressmunicipality'],
        'barangay'     => $selected_row['addressbarangay'],
        'street'       => $selected_row['addressstreet'],
        'zipcode'      => $selected_row['addresszipcode']
    );
}

由于您的地址没有重复,这应该会产生所需的数组结构。

【讨论】:

  • 不,我没有重复数据,结果返回只是重复
  • 我是否必须更改代码中的任何内容,因为我得到[] 作为服务器的响应,我在$newData[$tmp_key]['Address'][] => array( 中也有错误,我必须将其更改为$newData[$tmp_key]['Address'][] = array(
  • 我所做的是将上面的new_data 更改为newData 但结果与我之前的代码相同,地址重复。但我确实返回了所需的结构,只是再次出现了重复
  • 你知道我在你的答案中做了什么,我发现了这个 if(!isset($newData[$tmp_key]['Address'][$selected_row['ownertin']])) { $newData[$tmp_key]['Address'][$selected_row['ownertin']] = array( 我所做的就是把它改成 if(!isset($newData[$tmp_key]['Address'][$selected_row['ownertin']])) { $newData[$tmp_key]['Address'][$selected_row['contact_flag']] = array( 因为只有 0 and 1 的值我认为我得到它的工作好的。 can you revert to that answer?also 我会继续测试是否会有另一个问题。
  • 我也试过了,唯一的区别是我添加了$newData[$tmp_key]['Address'][$selected_row['contact_flag']] = array( 似乎没问题你觉得呢?只需将其添加到答案中,如果没有发现任何问题,我会接受,谢谢您的想法
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多