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



已解决:

感谢您的回答,但我找到了另一种解决特定问题的方法。我没有提到我需要这个组合数组做什么。 我想获取$exbet的值,其中键$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中的第一个分组,依此类推。

$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=>value 对的最终数组,我会添加以下内容(使用 + 运算符而不是 array_merge 来保留数字键):

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

假设$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)
}

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

<?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);
?>

最新更新