PHP将值从一个数组插入另一个数组

时间:2013-01-18 21:54:34

标签: php multidimensional-array

我在使用几个阵列时遇到了一些麻烦而且卡住了。我能够读取两者,但无法弄清楚如何让第一个基于一个键搜索第二个键并将另一个键的值拉入第一个键。两个阵列都有代码 description 。我需要让下一个数组中的 description 进入第一个代码相同的地方。第一个数组中有代码的多个实例。

Array1 (
[0] => Array (
    [state] => AK
    [effdate] => 01/01/2012
    [code] => 1
    [description] => null
    [enddate] => null
)
[1] => Array (
    [state] => AK
    [effdate] => 01/01/2012
    [code] => 2
    [description] => null
    [enddate] => null
)
[2] => Array (
    [state] => AK
    [effdate] => 01/01/2012
    [code] => 3
    [description] => null
    [enddate] => null
)
)

Array2 (
[0] => Array (
    [code] => 1
    [description] => some description
)
[1] => Array (
    [code] => 2
    [description] => some other description
)
[2] => Array (
    [code] => 3
    [description] => yet another description
)
)

此外,第一个数组是从MySQL表创建的,而第二个数组是来自制表符分隔的文本文件。最终结果将把文本文件中的描述写入MySQL表。下面是我必须在两个数组之间查看并将它们写入HTML表的代码。我能够检索第一个条目的描述,但没有别的。我知道它与if语句中的* $ ncci_array [$ i] *中的 $ i 有关,但我不知道要用什么替换它。 Array1 = * $ rates_array *和Array2 = * $ ncci_array *

echo '<table border="1"><tr><td>ID</td><td>State</td><td>Effective</td><td>Code</td><td>Description</td><td>End</td></tr>'."\n";

if (($rates_array[$i]['state'] == 'AL'||'AK'||'AZ'||'AR'||'CO'||'CT'||'DC'||'FL'||'GA'||'HI'||'ID'||'IL'||'IA'||'KS'||'KY'||'LA'||'ME'||'MD'||'MS'||'MO'||'MT'||'NE'||'NV'||'NH'||'NM'||'OK'||'RI'||'SC'||'SD'||'TN'||'UT'||'VT'||'VA'||'WI') && ($rates_array[$i]['code'] == $ncci_array[$i]['code']))
{
    $rates_array[$i]['description'] = strtolower($ncci_array[$i]['description']);
}else{
    $rates_array[$i]['description'] = 'Description unavailable at this time';
}

for ($rates_row = 0; $rates_row < count($rates_array)-1; $rates_row++)
{
    if ($rates_array[$i]['code'] == $rates_array[$i+1]['code'])
    {
        $rates_array[$i]['enddate'] = date('Y-m-d', strtotime('-1 day', strtotime($rates_array[$i+1]['effdate'])));
    }else{
        $rates_array[$i]['enddate'] = date('Y-m-d', strtotime('+1 year', strtotime($rates_array[$i]['effdate'])));
    }

    echo '<tr><td>'.$i.'</td><td>'.$rates_array[$i]['state'].'</td><td>'.$rates_array[$i]['effdate'].'</td><td>'.$rates_array[$i]['code'].'</td><td>'.$rates_array[$i]['description'].'</td><td>'.$rates_array[$i]['enddate'].'</td></tr>'."\n";

    $i++;
}
echo '</table>';

当前输出如下所示

| ID | State | Effective  | Code | Description      | End        |
| 0  | AK    | 01/01/2011 | 1    | Some description | 12/31/2011 |
| 1  | AK    | 01/01/2012 | 1    |                  | 01/01/2013 |
| 2  | AK    | 01/01/2012 | 2    |                  | 01/01/2013 |
| 3  | AK    | 01/01/2012 | 3    |                  | 01/01/2013 |

谢谢你看看!

1 个答案:

答案 0 :(得分:1)

遍历两个数组,检查两者之间的匹配。 (在编辑问题之前发布)

foreach($rates_array as $key => $val){ // Array1 where description is null
    foreach($ncci_array as $k => $v){ // Array2 where description is set
        if($val['code'] == $v['code']) 
            $rates_array[$key]['description'] = $v['description'];
    }
}

这将强制Array2中的描述值进入Array1,因此可以在表中为您提供一个数组,以避免混淆。

此外,您并不需要$ i,因为您使用$ rates_row作为循环计数器。