【问题标题】:Replace one array keys with second array values用第二个数组值替换一个数组键
【发布时间】:2015-04-02 18:27:47
【问题描述】:

我需要组合两个数组,第一个数组中的键应替换为第二个数组中的相应值。如果两个数组具有相同数量的元素并且它们具有相同的顺序,则以下代码可以正常工作。

$first = array("a"=>"red", "b"=>"green", "c"=>"blue");

$second = array("a"=>"sun", "b"=>"grass", "c"=>"sky");

$new = array_combine($second, $first);

print_r($new);

结果

Array
(
    [sun] => red
    [grass] => green
    [sky] => blue
)

但我需要它在它们没有相同元素编号或顺序不同的情况下工作。我怎样才能实现它?

【问题讨论】:

  • array_combine() 需要参数应该有相同数量的元素
  • 你的意思是“但我需要这个在他们没有相同元素编号的情况下工作”?考虑这些数组: 1- $myArrayA = ['a'=>'aa' , 'b' => 'bb'] 2- $myArrayB = ['a' => 'cc' , 'd' => 'ff ' , 'g' => 'hh'] 你的数组组合的结果是什么??
  • @majid8911 应该是$combination = ['cc'=>'aa' , 'b' => 'bb']

标签: php arrays function


【解决方案1】:

如果您需要修剪数组以便可以使用array_combine(),下面的方法将通过修剪最大的数组来使两者的长度相同,然后将它们组合起来。

$first = array("a"=>"red", "b"=>"green", "c"=>"blue");

$second = array("a"=>"sun", "b"=>"grass", "c"=>"sky", "d" => "moon");

$first = array_slice($first, 0, count($second));
$second = array_slice($second, 0, count($first));

$new = array_combine($second, $first);

print_r($new);

结果:

Array
(
    [sun] => red
    [grass] => green
    [sky] => blue
)

它适用于所有情况:

  • $first 大于 $second
  • $second 大于 $first
  • $first$second 的大小相同。

【讨论】:

  • 谢谢。但我不能改变第一个数组的大小。如果他们没有相同的顺序?
  • @user4076077 那么你怎么可能把它们结合起来呢?告诉我们你的策略。
  • 我可以使用其他东西而不是array_combine() 吗?
  • @user4076077 真正的问题是要知道当数组具有不同大小时您期望的结果。
  • $first = array("a"=>"red", "b"=>"green", "c"=>"blue"); $second = array("a"=>"sun", "b"=>"grass", "c"=>"sky", "d" => "moon"); $combination = array("sun"=>"red", "grass"=>"green", "sky"=>"blue");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2018-05-11
相关资源
最近更新 更多