2013-07-08 91 views
0

我的问题听起来有些笨拙,但这正是我想要做的。 我有一个从SQL查询获得的名为$data的数组。为了您的参考,我把它放在前面两个元素:如何将数组元素转换为PHP中的simplae元素?

Array 
(
    [0] => Array 
     (
      [test_pack_id] => 9f27643023a83addd5eed41c4aade840 
      [test_pack_name] => Bank Exams Complete Combo 
      [test_pack_desc] => This Package contains 24 tests of Reasoning, English and Quantitative Aptitude + 2 Mega tests of all 3 subjects. 

Total Tests in this Package : 26 
      [test_pack_type_id] => 3 
      [test_pack_image] => 
      [test_pack_validity_year] => 0 
      [test_pack_validity_month] => 3 
      [test_pack_validity_days] => 0 
      [test_pack_plan] => paid 
      [test_pack_price] => 399.00 
      [test_pack_no_tests] => 0 
      [test_pack_publish] => yes 
      [test_pack_sold] => 1 
      [test_pack_created_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
      [test_pack_updated_staff_id] => 81c4e3607c7e56bbf5461ef150437675 
      [test_pack_created_date] => 1347127051 
      [test_pack_updated_date] => 1349235701 
      [test_pack_purchase_date] => 1351228594 
     ) 

    [1] => Array 
     (
      [test_pack_id] => e7e95de96987cc7c89c1f0183110fb38 
      [test_pack_name] => Bank Reasoning 
      [test_pack_desc] => This package contains 8 tests on Reasoning. 
      [test_pack_type_id] => 3 
      [test_pack_image] => 
      [test_pack_validity_year] => 0 
      [test_pack_validity_month] => 3 
      [test_pack_validity_days] => 0 
      [test_pack_plan] => free 
      [test_pack_price] => 0.00 
      [test_pack_no_tests] => 0 
      [test_pack_publish] => yes 
      [test_pack_sold] => 4 
      [test_pack_created_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
      [test_pack_updated_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
      [test_pack_created_date] => 1347127196 
      [test_pack_updated_date] => 1347127387 
      [test_pack_purchase_date] => 1363775709 
     ) 
) 

现在我要在这个数组中插入一个新的键值对。为此,我向数据库发出一个查询。该查询将针对数组$data的每个元素进行触发。它的代码如下:

foreach($data as $data1) { 

      $sql = " SELECT COUNT(*) as package_count FROM ". TBL_USER_PACKAGES. " WHERE pack_id ='".$data1['test_pack_id']."' AND pack_assign_date "; 
      $sql .= " BETWEEN UNIX_TIMESTAMP(CURDATE()) and UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 1 day)) "; 
      $this->mDb->Query($sql); 
      $data1['package_sold_count'] = $this->mDb->FetchArray(MYSQL_FETCH_SINGLE); 
} 

但是,当我访问该查询的结果,我得到它在这样的阵列格式:

Array(
[0] => Array 
     (
      [test_pack_id] => 9f27643023a83addd5eed41c4aade840 
      [test_pack_name] => Bank Exams Complete Combo 
      [test_pack_desc] => This Package contains 24 tests of Reasoning, English and Quantitative Aptitude + 2 Mega tests of all 3 subjects. 

Total Tests in this Package : 26 
      [test_pack_type_id] => 3 
      [test_pack_image] => 
      [test_pack_validity_year] => 0 
      [test_pack_validity_month] => 3 
      [test_pack_validity_days] => 0 
      [test_pack_plan] => paid 
      [test_pack_price] => 399.00 
      [test_pack_no_tests] => 0 
      [test_pack_publish] => yes 
      [test_pack_sold] => 1 
      [test_pack_created_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
      [test_pack_updated_staff_id] => 81c4e3607c7e56bbf5461ef150437675 
      [test_pack_created_date] => 303 
      [test_pack_updated_date] => 1349235701 
      [test_pack_purchase_date] => 256 
      [package_sold_count] => Array 
       (
        [package_count] => 4 
       ) 
[1] => Array 
     (
      [test_pack_id] => e7e95de96987cc7c89c1f0183110fb38 
      [test_pack_name] => Bank Reasoning 
      [test_pack_desc] => This package contains 8 tests on Reasoning. 
      [test_pack_type_id] => 3 
      [test_pack_image] => 
      [test_pack_validity_year] => 0 
      [test_pack_validity_month] => 3 
      [test_pack_validity_days] => 0 
      [test_pack_plan] => free 
      [test_pack_price] => 0.00 
      [test_pack_no_tests] => 0 
      [test_pack_publish] => yes 
      [test_pack_sold] => 4 
      [test_pack_created_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
      [test_pack_updated_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
      [test_pack_created_date] => 303 
      [test_pack_updated_date] => 1347127387 
      [test_pack_purchase_date] => 110 
      [package_sold_count] => Array 
       (
        [package_count] => 2 
       ) 
) 

其实我想要的数组作为新的键值对,而不是新的关联数组,如下所示:

Array(
    [0] => Array 
      (
       [test_pack_id] => 9f27643023a83addd5eed41c4aade840 
       [test_pack_name] => Bank Exams Complete Combo 
       [test_pack_desc] => This Package contains 24 tests of Reasoning, English and Quantitative Aptitude + 2 Mega tests of all 3 subjects. 

    Total Tests in this Package : 26 
       [test_pack_type_id] => 3 
       [test_pack_image] => 
       [test_pack_validity_year] => 0 
       [test_pack_validity_month] => 3 
       [test_pack_validity_days] => 0 
       [test_pack_plan] => paid 
       [test_pack_price] => 399.00 
       [test_pack_no_tests] => 0 
       [test_pack_publish] => yes 
       [test_pack_sold] => 1 
       [test_pack_created_staff_id] => ff8d4a5ea6bf11dce105aa2fa7b959b8 
       [test_pack_updated_staff_id] => 81c4e3607c7e56bbf5461ef150437675 
       [test_pack_created_date] => 303 
       [test_pack_updated_date] => 1349235701 
       [test_pack_purchase_date] => 256 
       [package_sold_count] => 4 

) 

任何人都可以帮助我实现这个目标吗?提前致谢。

回答

1

东西如下面所示,简单应该可以正常工作,做你想做什么:

<?php 
    foreach ($array as &$subArray) { 
     $subArray["package_sold_count"] = $subArray["package_sold_count"]["package_count"]; 
    } 
    unset($subArray); 
?> 

或者干脆设置不同,当你给它分配:

foreach($data as $data1) { 

      $sql = " SELECT COUNT(*) as package_count FROM ". TBL_USER_PACKAGES. " WHERE pack_id ='".$data1['test_pack_id']."' AND pack_assign_date "; 
      $sql .= " BETWEEN UNIX_TIMESTAMP(CURDATE()) and UNIX_TIMESTAMP(DATE_ADD(CURDATE(),INTERVAL 1 day)) "; 
      $this->mDb->Query($sql); 

      //First assign a variable 
      $dbFetch = $this->mDb->FetchArray(MYSQL_FETCH_SINGLE); 

      //Then refer to it 
      $data1['package_sold_count'] = $dbFetch["package_count"]; 
} 
1

当你获取新的密钥/值对:

$data1['package_sold_count'] = $this->mDb->FetchArray(MYSQL_FETCH_SINGLE); 

你实际上正在获取一个数组,即使它只是o ne元素,这就是你所看到的。

相反,这样做:

$temp = $this->mDb->FetchArray(MYSQL_FETCH_SINGLE); 
$data1['package_sold_count'] = $temp['package_count']; // assumes associative array 

这可能工作过,但我偶尔有麻烦包装代码起来得太紧。

$data1['package_sold_count'] = $this->mDb->FetchArray(MYSQL_FETCH_SINGLE)['package_count']; 
相关问题