Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组重新映射-我可以做得更好吗?_Php - Fatal编程技术网

Php 数组重新映射-我可以做得更好吗?

Php 数组重新映射-我可以做得更好吗?,php,Php,首先,我有以下数组对象(id、foo和bar是数据库查询的结果,应该作为对象变量->id) 及 我想创建一个以id列为键的新数组 array([1] => array([foo] => 'a', [bar] => 'b'), [2] => array([foo] => 'b', [bar] => 'a') 我使用以下代码行创建了所需的数组: foreach($array1 as $row1) { $newArray1[$row1->id] = $

首先,我有以下数组对象(id、foo和bar是数据库查询的结果,应该作为对象变量
->id

我想创建一个以id列为键的新数组

array([1] => array([foo] => 'a', [bar] => 'b'), [2] => array([foo] => 'b', [bar] => 'a')
我使用以下代码行创建了所需的数组:

foreach($array1 as $row1) {
   $newArray1[$row1->id] = $row1;
}

foreach($array2 as $row2) {
    $newArray2[$row2->id] = $row2;
}

foreach($array2 as $key => row3) { //array 2 is always longer or equal to array 1
    $result[$key]['bar'] = $newArray2[$key]->bar;
    if (isset($newArray1[$key])) {
         $result[$key]['foo'] = $newArray1[$key]->foo;
    } else {
         $result[$key]['bar'] = 0;
    }
}

我认为这可以做得容易得多。是这样吗?如果是这样,怎么做?

如果我知道您需要合并两个数组,使用“id”字段作为索引,这两个字段都相等。 我会这样做:

$newarray = array();
for($i=0;$i<count($array1);$i++)
    $newarray[$array1[$i]["id"]] = array($array1[$i]["foo"], $array2[$i]["bar"]);
$newarray=array();

对于($i=0;$i而不是创建新数组,您可以执行以下操作:

$arr1=array('0' => array('id' => 1, 'foo' => 'a'), '1' => array('id' => 2, 'foo' => 'b'));

$arr2=array('0' => array('id' => 1, 'bar' => 'b'), '1' => array('id' => 2, 'bar' => 'a'));
for($i=0;$i<count($arr1);$i++){
    $arr1[$i] = array("foo"=>$arr1[$i]["foo"], "bar"=>$arr2[$i]["bar"]);

}
print_r($arr1);
$arr1=array('0'=>array('id'=>1,'foo'=>a'),'1'=>array('id'=>2,'foo'=>b');
$arr2=array('0'=>array('id'=>1,'bar'=>'b'),'1'=>array('id'=>2,'bar'=>a');
对于($i=0;$i$arr1[$i][“foo”],“bar”=>$arr2[$i][“bar”]);
}
印刷费($arr1);

比这7行琐碎的代码容易得多(注意:在我发表评论后不久,代码就被更改了)?实际上,你可以不使用中间数组,直接在前2个循环中填充
$result
。难道没有类似array\u merge的东西可以做到这一点吗?如果有
array\u merge\u完全像\u AgeDeO\u需要()
function-那么是的,谢谢你的帮助,如果你回答“没有”,我会接受这个答案:)
$newarray = array();
for($i=0;$i<count($array1);$i++)
    $newarray[$array1[$i]["id"]] = array($array1[$i]["foo"], $array2[$i]["bar"]);
$arr1=array('0' => array('id' => 1, 'foo' => 'a'), '1' => array('id' => 2, 'foo' => 'b'));

$arr2=array('0' => array('id' => 1, 'bar' => 'b'), '1' => array('id' => 2, 'bar' => 'a'));
for($i=0;$i<count($arr1);$i++){
    $arr1[$i] = array("foo"=>$arr1[$i]["foo"], "bar"=>$arr2[$i]["bar"]);

}
print_r($arr1);