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