【问题标题】:i want to apply array_combine to unequal arrays [duplicate]我想将array_combine应用于不相等的数组[重复]
【发布时间】:2017-11-30 04:56:58
【问题描述】:

我想要来自两个不同数组的键值对 有两种情况。 1) 两者相等 2) 第二个数组比第一个数组大

我的代码是

$array1=array("anu","jinu");
$array2=array("1","2","0");

我想做一双像

  anu-1

  jinu-2

如果 $array1 元素已完成,则不必与 $array2 配对 从示例中我们可以忽略 $array2 中的第三个元素 我尝试应用 array_combine,但对于两个不相等的数组不实用 如果有人知道解决方案,请帮助我

【问题讨论】:

  • @mickmackusa 我也看到了,但不太理解,所以才问。 :(
  • 没关系。以后,如果您发现没有对您有帮助的重复或接近重复,您应该在问题中列出。这向志愿者证明了你在研究这个问题上付出了努力。好消息是这个较新的页面提供了比那个更广泛的正确答案。请更新您的问题以声明 $array2 永远不会短于 $array1
  • @mickmackusa 更新
  • 在仔细阅读了我的重复链接后,我承认该页面是一个垃圾重复链接。这些更适合:stackoverflow.com/questions/4769213/… & stackoverflow.com/questions/19394980/… 如果有人有能力用这些新链接更新我的关闭,请帮我一个忙,因为我不能这样做。

标签: php arrays


【解决方案1】:

如果您不想要任何循环,只需使用array_combine。使用array_slice尝试以下解决方案

$array1=array("anu","jinu");
$array2=array("1","2","0");
$cnt1 = count($array1);
$cnt2 = count($array2);
if($cnt1>$cnt2)
    $array1=array_slice($array1, 0, $cnt2);
elseif($cnt2>$cnt1)
    $array2=array_slice($array2, 0, $cnt1);

$arr = array_combine($array1,$array2);
print_r($arr);

注意:它将检查两个数组。并从两者中获取较短数组的长度

DEMO

编辑

如果它的修复总是 array2 长度等于或大于 array1 那么你可以忽略 if -elseif 语句。为此,请尝试以下代码

$array1=array("anu","jinu");
$array2=array("1","2","0");

$cnt1 = count($array1);
$array2=array_slice($array2, 0, $cnt1);   

$arr = array_combine($array1,$array2);
print_r($arr);

【讨论】:

  • 你能告诉其他 if 语句对 array_slice 有什么作用吗?
  • 它用于检查数组的长度,如果数组 1 更大,那么它只需要第二个数组的等效长度数组,反之亦然
【解决方案2】:

试试这个

    $array1=array("anu","jinu");
    $array2=array("1","2","0");

    foreach($array1 as $key => $value){

     $newarray[$array2[$key]] = $value;

    }

    print_r($newarray);

【讨论】:

  • 你怎么知道哪个数组更长?只是猜测和希望?选错一个,您将尝试访问一个不存在的元素。 :(
  • @user7441072 这个答案会在尺寸不平衡时引起注意。
  • @mickmackusa 是的,你是对的。但在我的问题中,第二个数组总是很大或两者相等。
  • @user7441072 重要信息应该在您的问题中。如果这是真的,那么你应该将绿色对勾授予 Sachin、Arun 或 Erwin
  • @mickmackusa B Desai 在每种情况下都解决了这个问题,他还通过演示进行了解释。这就是为什么我给他打了绿勾
【解决方案3】:

你可以使用下面的代码输出你想要的输出

$arr1=array("anu","jinu");
$arr2=array("1","2","0");
$newArr = array();
foreach($arr1 as $key => $value){
   $newArr[$value] = $arr2[$key];
}
echo "<pre>";print_r($newArr);

【讨论】:

  • 你怎么知道哪个数组更长?只是猜测和希望?选错一个,您将尝试访问一个不存在的元素。 :(
  • @user7441072 这个答案会在尺寸不平衡时引起注意。
  • 这里我假设你总是喜欢使用 $array1。如果不是这种情况,那么您可以使用 php 的 count() 函数并根据该函数使用 array_slice() 函数
【解决方案4】:

使用array_slice()array_combine()

// Slice array2 to match count with array1
$slice = array_slice($array2, 0, count($array1)); 
// Combine using array1 as key, sliced array as value
$combine = array_combine($array1, $slice);        

print_r($combine); // Print result

【讨论】:

  • 你怎么知道哪个数组更长?只是猜测和希望?选错了,array_combine() 会骂你。 :(
【解决方案5】:

代码:(Demo)

$array1=array("anu","jinu");
$array2=array("1","2","0");

foreach($array1 as $k=>$v){
    if(!isset($array2[$k])) break;  // avoid "Notice: Undefined offset" and write early exit from loop
    $result[$v]=$array2[$k];
}

var_export($result);

或者

var_export(array_combine(array_intersect_key($array1,$array2),array_intersect_key($array2,$array1)));

任一输出:

array (
  'anu' => '1',
  'jinu' => '2',
)

编辑:

OP 说第二个数组总是更大,所以这些是更精简的方法:

foreach($array1 as $k=>$v){
    $result[$v]=$array2[$k];
}    
var_export($result);

var_export(array_combine($array1,array_slice($array2,0,sizeof($array1))));

var_export(array_combine($array1,array_intersect_key($array2,$array1)));    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多