比较和替换数组中的值
Posted
技术标签:
【中文标题】比较和替换数组中的值【英文标题】:Compare and replace values in array 【发布时间】:2014-05-31 21:56:40 【问题描述】:我需要比较 2 个数组,第一个数组有一个顺序并且不能更改,在另一个数组中我有不同的值,第一个数组必须将他的 id 与另一个数组的 id 进行比较,如果 id 它是一样的,取值并替换为 show all in the same order
例如:
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");
在这种情况下,我想要的结果是这样的:
"1a-dogs","2a-cats","3a-birds","4a-walking"
如果这种情况下的id 4a相同,则必须修改该条目并将其他数组的值放入并保持相同的顺序
我这样做了,但我没有得到工作:
for($fte=0;$fte<count($array_1);$fte++)
$exp_id_tmp=explode("-",$array_1[$fte]);
$cr_temp[]="".$exp_id_tmp[0]."";
for($ftt=0;$ftt<count($array_2);$ftt++)
$exp_id_targ=explode("-",$array_2[$ftt]);
$cr_target[]="".$exp_id_targ[0]."";
/// Here I tried use array_diff and others but no can get the results as i want
我怎样才能得到这个结果?
【问题讨论】:
那么您最终找到问题的答案了吗? 【参考方案1】:也许您可以将 array_udiff_assoc() 函数与回调一起使用
【讨论】:
【参考方案2】:给你。这不是我写过的最干净的代码。
可运行示例:http://3v4l.org/kUC3r
<?php
$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");
function getKeyStartingWith($array, $startVal)
foreach($array as $key => $val)
if(strpos($val, $startVal) === 0)
return $key;
return false;
function getMergedArray($array_1, $array_2)
$array_3 = array();
foreach($array_1 as $key => $val)
$startVal = substr($val, 0, 2);
$array_2_key = getKeyStartingWith($array_2, $startVal);
if($array_2_key !== false)
$array_3[$key] = $array_2[$array_2_key];
else
$array_3[$key] = $val;
return $array_3;
$array_1 = getMergedArray($array_1, $array_2);
print_r($array_1);
【讨论】:
【参考方案3】:首先将 2 个数组拆分为正确的键和值对(键 = 1a 和值 = 狗)。然后尝试遍历第一个数组并检查其每个键是否存在于第二个数组中。如果是,则替换第一个数组中第二个数组的值。最后,您的第一个数组将包含您想要的结果。
像这样:
$array_1 = array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2 = array("4a-walking","2a-cats");
function splitArray ($arrayInput)
$arrayOutput = array();
foreach ($arrayInput as $element)
$tempArray = explode('-', $element);
$arrayOutput[$tempArray[0]] = $tempArray[1];
return $arrayOutput;
$arraySplit1 = splitArray($array_1);
$arraySplit2 = splitArray($array_2);
foreach ($arraySplit1 as $key1 => $value1)
if (array_key_exists($key1, $arraySplit2))
$arraySplit1[$key1] = $arraySplit2[$key1];
print_r($arraySplit1);
看到它在这里工作: http://3v4l.org/2BrVI
【讨论】:
【参考方案4】:$array_1=array("1a-dogs","2a-cats","3a-birds","4a-people");
$array_2=array("4a-walking","2a-cats");
function merge_array($arr1, $arr2)
$arr_tmp1 = array();
foreach($arr1 as $val)
list($key, $val) = explode('-', $val);
$arr_tmp1[$key] = $val;
foreach($arr2 as $val)
list($key, $val) = explode('-', $val);
if(array_key_exists($key, $arr_tmp1))
$arr_tmp1[$key] = $val;
return $arr_tmp1;
$result = merge_array($array_1, $array_2);
echo '<pre>';
print_r($result);
echo '</pre>';
这个短代码可以正常工作,你会得到这样的结果:
Array
(
[1a] => dogs
[2a] => cats
[3a] => birds
[4a] => walking
)
【讨论】:
以上是关于比较和替换数组中的值的主要内容,如果未能解决你的问题,请参考以下文章