组合两个数组,将一个设置为键,另一个设置为值

时间:2017-03-20 13:34:56

标签: php arrays

解决:

感谢您的回答,但我找到了解决我的特定问题的另一种方法。我没有提到我需要这个组合阵列的东西。 我希望获得$exbet的值,其中key $ex匹配来自mysql查询的变量。相反,我在sql:

中使用FIELD()执行了以下操作
$mid=$pred['mid'] ///this is from a previous query

$mid = str_replace('|', ',', $mid);

SELECT * FROM matches m  
LEFT JOIN combo c ON c.mid 
LIKE CONCAT('%|',m.id,'|%') 
WHERE c.mid=:mid 
ORDER BY FIELD(m.id".$mid.")

因此fetch_array的排序方式与$ mid相同(默认情况下不是id)。

然后我通过$ exbet循环获得正确的mid / bet

原帖:

$exbet=explode('|',$tt['bet']);
$ex=explode('|',$tt['mid']);

我有这两个数组,我想将它们组合起来,使用$ ex作为键,$ exbet作为值。 我试过了

$array = array_combine($ex,$exbet);

但它什么也没输出。

这是$ ex:

Array ( [0] => [1] => 8879 [2] => 8878 [3] => 8880 [4] => ) Array ( [0] => [1] => 8868 [2] => 8876 [3] => 8873 [4] => 8869 [5] => ) 

和$ exbet:

Array ( [0] => [1] => P [2] => N [3] => X ) Array ( [0] => [1] => 1 [2] => 1X [3] => P [4] => 1 ) 

现在我看到每个都有2个数组。我必须将$ ex中的第一个与$ exbet中的第一个分组,依此类推。

2 个答案:

答案 0 :(得分:1)

$ ex和$ exbet的子数组没有匹配的元素数。 $ ex [0]包含5,而$ exbet [0]包含4,子阵列#1的情况相同。

根据文档(http://php.net/manual/en/function.array-combine.php

  

错误/异常

     

如果键和值中的元素数不匹配,则抛出E_WARNING。

一旦你完成了整理,你可能想要考虑将从$ ex生成的重复(和空)键。 $ ex的两个子数组都有两个空值,因此第二个空值将覆盖第一个。如果您打算在结尾处将所有这些组合成一维数组并且仍然具有重复的键值,那么这将再次发挥作用。鉴于所有这些,我的方法将是这样的:

foreach($ex as $id=>$v){
  $newarray[] = array_combine($ex[$id], $exbet[$id]);
}

然后如果你想要一个带有一组key =>值对的最终数组,我会添加它(使用+运算符而不是array_merge来保存数字键):

$finalarray = array();
foreach($newarray as $ct=>$v){ $finalarray += $newarray[$ct];}

答案 1 :(得分:1)

假设$ex$exbet是数组数组,并且您希望组合数组看起来像这样:

array(7) {
  [8879]=>
  string(1) "P"
  [8878]=>
  string(1) "N"
  [8880]=>
  string(1) "X"
  [8868]=>
  int(1)
  [8876]=>
  string(2) "1X"
  [8873]=>
  string(1) "P"
  [8869]=>
  int(1)
}

然后这应该做的工作。我添加了一些错误检查以跳过您的空值。如果键名中或其他数组中的关联值中有空,则跳过它。

<?php
$exbet=explode('|',$tt['bet']);
$ex=explode('|',$tt['mid']);

$combined_array = array();

foreach($ex as $top_level_key => $ex_array){
  $exbet_array = $exbet[$top_level_key];
  foreach($ex_array as $key => $keyName){
    if(!empty($keyName) && isset($exbet_array[$key]) && !empty($exbet_array[$key])){
      $combined_array[$keyName] = $exbet_array[$key];
    }
  }
}

var_dump($combined_array);

?>