Php 根据元素的值替换数组中的元素

Php 根据元素的值替换数组中的元素,php,arrays,Php,Arrays,我有一个里面有嵌套数组的数组。每个数组都有一个名为CBSA的元素,该元素的值为五位数。在另一个数组中,我将五位数字作为键,并将它们对应的值作为它们的值。我想循环遍历嵌套数组,并用第二个数组中相应的值替换五位数的值。例如: $array = array(array(CBSA => 12345), array(CBSA => 98765), array(CBSA => 56789)); 在另一个数组中,我有: $arra

我有一个里面有嵌套数组的数组。每个数组都有一个名为CBSA的元素,该元素的值为五位数。在另一个数组中,我将五位数字作为键,并将它们对应的值作为它们的值。我想循环遍历嵌套数组,并用第二个数组中相应的值替换五位数的值。例如:

$array = array(array(CBSA => 12345),
               array(CBSA => 98765),
               array(CBSA => 56789));
在另一个数组中,我有:

$array2 = array(12345 => "George Washington",
                56789=> "Barack Obama",
                98765=> "Thomas Jefferson");
我想找到每个嵌套数组中的值,并用第二个数组中相应的字符串替换它

因此,第一个阵列将成为:

$array = array(array(CBSA=>"George Washington"), 
               array(CBSA=>"Thomas Jefferson"), 
               array(CBSA => "Barack Obama"));

最好的方法是在第一个数组中循环,然后从第二个数组中为其分配相应的值。。。像这样的

$results = array();

foreach($array as $key => $cbsa) {
    if (isset($array2[$cbsa['CBSA']])) {
        $array[$key]['CBSA'] = 
        $results[] = array('CBSA' => $array2[$cbsa['CBSA']]);
    }
}
作为使用初始代码和上述循环的完整工作示例,这将提供所需的输出:

<?php

$array = array(array('CBSA' => 12345),
               array('CBSA' => 98765),
               array('CBSA' => 56789));

$array2 = array(12345 => "George Washington",
                56789=> "Barack Obama",
                98765=> "Thomas Jefferson");

$results = array();

foreach($array as $key => $cbsa) {
    if (isset($array2[$cbsa['CBSA']])) {
        $results[] = array('CBSA' => $array2[$cbsa['CBSA']]);
    }
}
echo('<pre>');
print_r($results);
试试这个:
演示:


请尝试仅使用一个foreach循环的方法

$arrays = array(
        array("CBSA" => 12345),
        array("CBSA" => 98765),
        array("CBSA" => 56789)
    );
$array2 = array(
        12345 => "George Washington",
        56789 => "Barack Obama",
        98765 => "Thomas Jefferson"
    );
/****** Code block ********/
array_walk($arrays, function(&$array) use ($array2)
{
    $arr = array_values($array);
    if(@$array2[$arr[0]]) // $arr[0] contains numeric value
    {
        $key = array_search($arr[0], $array); // contains CBSA
        $array[$key] = $array2[$arr[0]];
    }
});
print_r($arrays);
$array=array(array(CBSA=>12345),
阵列(CBSA=>98765),
阵列(CBSA=>56789));
$array2=数组(12345=>“乔治华盛顿”,
56789=>“巴拉克·奥巴马”,
98765=>“托马斯·杰斐逊”);
$newArray=array();
foreach($key=>$value的数组){
$newArray[]=array('CBSA'=>$array2[$value['CBSA']]);
}
回声';
打印(新数组);
输出


问题是,第二个数组只是一个数字和字符串对的数组,第一个数组的数字顺序与第二个数组的数字顺序不同。我需要能够将正确的数字与其在第二个数组中的对匹配起来,并用相应的字符串替换它。我已将完整的工作代码复制到答案中,以获得所需的结果。如果仍然存在未定义的偏移量错误,那么您的数据似乎不匹配,如果是这种情况,请让我知道,我将对此进行修改。它可以工作,当我打印阵列时,它确实可以工作,但出于某些原因,我也会收到几百个这样的错误:注意:未定义的偏移量:31080 in。。。我不知道为什么。如果你查找这些ID,它们肯定不会存在于你的第二个数组中。我已经更新了答案,以满足第二个数组中不存在的ID的需要,这应该会帮你解决问题。如果你只需要像George Washington这样的值,Thomas Jefferson和Barack Obama所以我开发了程序来获取值。所以你想要键或值或两者。你想要打印键或值或两者?????使用两个foreach循环不是那么理想。使用静态CBSA键也不是一个好的解决方案。键可能会发生变化。
 $array = array(array(CBSA => 12345),
               array(CBSA => 98765),
               array(CBSA => 56789));

 $array2 = array(12345 => "George Washington",
                56789=> "Barack Obama",
                98765=> "Thomas Jefferson");

 $newArray  = array();

 foreach($array as $key => $value) {
      $newArray[] = array('CBSA' => $array2[$value['CBSA']]);
 }

 echo '<pre>';
 print_r($newArray);
$arrays = array(
        array("CBSA" => 12345),
        array("CBSA" => 98765),
        array("CBSA" => 56789)
    );
$array2 = array(
        12345 => "George Washington",
        56789 => "Barack Obama",
        98765 => "Thomas Jefferson"
    );
/****** Code block ********/
array_walk($arrays, function(&$array) use ($array2)
{
    $arr = array_values($array);
    if(@$array2[$arr[0]]) // $arr[0] contains numeric value
    {
        $key = array_search($arr[0], $array); // contains CBSA
        $array[$key] = $array2[$arr[0]];
    }
});
print_r($arrays);
Array
(
    [0] => Array
        (
            [CBSA] => George Washington
        )

    [1] => Array
        (
            [CBSA] => Thomas Jefferson
        )

    [2] => Array
        (
            [CBSA] => Barack Obama
        )

)