繁体   English   中英

使用 PHP,按键搜索数组并用匹配键中的值替换另一个数组中的值

[英]Using PHP, search an array by key and replace value in another array with value from matched key

我有两个 arrays:

$array_a =   
array (
    0 => array (
        0 => array (
                'name' => 'name',
                'label' => 'LBL_NAME',
            ),
        1 =>
            array(
                'name' => 'phone_office',
                'label' => 'LBL_PHONE_OFFICE',
            ),
        ),
    1 => array (
        0 =>
            array(
                'name' => 'website',
                'label' => 'LBL_WEBSITE',
            ),
            1 =>
            array(
                'name' => 'phone_fax',
                'label' => 'LBL_FAX',
            ),
        ),
    );

$array_b = array(
    'LBL_NAME' => 'Name:',
    'LBL_PHONE_OFFICE' => 'Office phone:',
    'LBL_WEBSITE' => 'Website:',
    'LBL_FAX' => 'Fax number:',
); 

如何用我的第二个数组中的相应值替换 [label] 的值?

换句话说,我想要结束的是:

$array_a =   
    array (
        0 => array (
            0 => array (
                    'name' => 'name',
                    'label' => 'Name:',
                ),
            1 =>
                array(
                    'name' => 'phone_office',
                    'label' => 'Office phone:',
                ),
            ),
        1 => array (
            0 =>
                array(
                    'name' => 'website',
                    'label' => 'Website:',
                ),
                1 =>
                array(
                    'name' => 'phone_fax',
                    'label' => 'Fax number:',
                ),
            ),
        );

你可以这样做:

foreach($array_a as $elemKey => $elemValue){
    foreach($elemValue as $itemKey => $itemValue){
         if(isset($array_a[$elemKey][$itemKey]['label'])){
              $array_a[$elemKey][$itemKey]['label'] = $array_b[$array_a[$elemKey][$itemKey]['label']];        
         } 
    }
}

print_r($array_a);

这将返回:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [name] => name
                    [label] => Name:
                )

            [1] => Array
                (
                    [name] => phone_office
                    [label] => Office phone:
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [name] => website
                    [label] => Website:
                )

            [1] => Array
                (
                    [name] => phone_fax
                    [label] => Fax number:
                )

        )

)

array_walk_recursive非常方便:

echo "\n------------ Table A ----------\n";
print_r($array_a);

function acallback(&$value, $key, $replace) {
    if (key_exists($value, $replace)) {
        $value = $replace[$value];
    } 
}

$status = array_walk_recursive($array_a, 'acallback', $array_b);
if ($status === false) {
    throw new \Exception("array_walk failed");
}

echo "\n--------- Table A Modified ----------\n";
print_r($array_a);

acallback也可以匿名并以这种方式使用:

echo "\n------------ Table A ----------\n";
print_r($array_a);

$status = array_walk_recursive($array_a, function(&$value, $key, $replace) {
    if (key_exists($value, $replace)) {
        $value = $replace[$value];
    } 
}
, $array_b);

if ($status === false) {
    throw new \Exception("array_walk failed");
}

echo "\n--------- Table A Modified ----------\n";
print_r($array_a);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM