PHP - 从db获取数据到JSON

时间:2013-02-01 14:29:35

标签: php mysql json

我有两个表,一个包含ID和FNAME(例如,01 Google),另一个ID,FIRSTNAME,SURNAME(来自01 JOHN DOE)。

最后一个数据库中的ID将用户与组织连接起来(f.ex这里有ID 01的Google)。

我正试图通过json_encode将这些变成JSON,但我不能因为爱我而弄清楚如何连接我得到的两个结果。

用户应该按组织排序。

例如:

{"Google":["John Doe","Paul"],"Microsoft":["Bill Gates"]}

我真的没有任何代码示例,因为我无法获得任何远程工作。我试图将它放入while循环中的数组中,但格式出错了 - 排序就这样了。

2 个答案:

答案 0 :(得分:1)

这样你就可以开始了,

<?php
    $outArr = array();
    $arr1 = array(0 => array('ID' => '01', 'FIRSTNAME' => 'Google'));
    $arr2 = array(0 => array('ID' => '01', 'FIRSTNAME' => 'JOHN', 'SURNAME' => 'DOE'),
        1 => array('ID' => '01', 'FIRSTNAME' => 'NewJOHN', 'SURNAME' => 'NewDOE'));

    foreach ($arr1 as $key => $compArr) {
        $companyId = $compArr['ID'];
        $outArr[$compArr['FIRSTNAME']] = '';
        foreach ($arr2 as $arr2key => $employeeArr) {
            if ($employeeArr['ID'] == $companyId) {
                $outArr[$compArr['FIRSTNAME']][] .= $employeeArr['FIRSTNAME'];
            }
        }
    }
    echo json_encode($outArr);
    exit;
?>

答案 1 :(得分:1)

这可能会对你有帮助,

$res = mysql_query('SELECT * FROM employee em LEFT JOIN organization org ON em.id = org.empid');
$op = array();
while($row = mysql_fetch_assoc($res))
{
  print_r($row);
  if(!isset($op[$row[org]])){
    $op[$row[org]]  = array();
  }
  array_push( $op[$row[org]], $row['fname']." ".$row['lname']);
}

echo json_encode($op);

以及基于我本地数据库中的条目的相应结果

Array
(
    [id] => 1
    [fname] => john
    [lname] => doe
    [sno] => 1
    [empid] => 1
    [org] => Google
)
Array
(
    [id] => 2
    [fname] => will
    [lname] => smith
    [sno] => 2
    [empid] => 2
    [org] => Microsoft
)
Array
(
    [id] => 3
    [fname] => abdul
    [lname] => raseed
    [sno] => 3
    [empid] => 3
    [org] => Google
)
{"Google":["john doe","abdul raseed"],"Microsoft":["will smith"]}

注意:DDL如下,

/*DDL Information*/
-------------------

CREATE TABLE `employee` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `fname` VARCHAR(256) DEFAULT NULL,
  `lname` VARCHAR(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1


CREATE TABLE `organization` (
  `sno` INT(11) NOT NULL AUTO_INCREMENT,
  `empid` VARCHAR(10) NOT NULL,
  `org` VARCHAR(256) DEFAULT NULL,
  PRIMARY KEY (`sno`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

节点:尝试使用最新的mysql函数,而不是弃用。