Php 合并两个数组
我得走了。首先是:Php 合并两个数组,php,Php,我得走了。首先是: array(3) { [0]=> string(10) "image1.jpg" [1]=> string(10) "image2.jpg" [2]=> string(10) "image3.jpg" } 第二点: array(3) { [0]=> object(stdClass)#22 (4) { ["id"]=> string(1) "1" ["name"]=> string(6) "Name
array(3)
{
[0]=> string(10) "image1.jpg"
[1]=> string(10) "image2.jpg"
[2]=> string(10) "image3.jpg"
}
第二点:
array(3)
{
[0]=> object(stdClass)#22 (4)
{
["id"]=> string(1) "1"
["name"]=> string(6) "Name 1"
["file"]=> string(15) "f1335421531.zip"
["desc"]=> string(6) " "
}
[1]=> object(stdClass)#23 (4)
{
["id"]=> string(1) "2"
["name"]=> string(6) "Name 2"
["file"]=> string(15) "f1335421552.zip"
["desc"]=> string(6) " "
}
[2]=> object(stdClass)#24 (4)
{
["id"]=> string(1) "3"
["name"]=> string(6) "Name 3"
["file"]=> string(15) "f1335421588.zip"
["desc"]=> string(6) " "
}
}
如何将这些阵列合并为具有以下项的阵列:
[0]=> object(stdClass)#22 (4)
{
["id"]=> string(1) "1"
["name"]=> string(6) "Name 1"
["file"]=> string(15) "f1335421531.zip"
["desc"]=> string(6) " "
["img"]=> string(10) "image1.jpg"
}
等等
是否有任何函数可以执行此操作,或者可能需要编写循环?第一个数组,称为$images 秒数组称之为$objects
for($i=0; $i<count($objects); $i++){
$object['img'] = $images[i];
}
var_dump($objects); //Check the result
对于($i=0;$i您需要将第二个数组的每个元素转换为当前为对象类型的数组类型,然后使用array\u merge函数对其进行迭代,您可以实现所需的功能。我认为没有特定的php函数用于此功能,因此请尝试以下操作:
foreach ($array2 as $i => &$item) {
$item->img = $array2[$i];
}
试一试
试试这个:
$arr=array(“image1.jpg”、“image2.jpg”、“image3.jpg”);
$obj=array((对象)数组(“id”=>“1”、“name”=>“name1”、“file”=>“asdb1.zip”、“desc”=>”),
(对象)数组(“id”=>“2”、“name”=>“name2”、“file”=>“asdb2.zip”、“desc”=>”),
(对象)数组(“id”=>“3”、“name”=>“name3”、“file”=>“asdb3.zip”、“desc”=>”)
);
对于($i=0;$i),输出示例明确指出,结果应该是一个具有新属性的img
的stdClass
,而不是一个数组。我们可以在迭代时键入cast,但不应该进行两次转换。这是一个增加处理时间(和内存)的开销问题,当数组足够大时。由于没有可用于解决方案的内置函数,我们可以。关于内存:我们可以在使用后取消设置变量。关于处理时间:我们将不得不妥协。或者,所有PHP函数都是用C语言构建的,因此我们可以创建一个供使用的函数。什么?仅仅因为没有内置函数这,你必须做疯狂的来回对话?你必须创建你自己的有效功能,而不是将2*O(n)
开销添加到O(n)
简单的同化。目标并不总是,通过一行代码来解决问题!谢谢,你的解决方案很有效,完全符合我的要求。
$std1 = new stdClass ();
$std1->id = "1";
$std1->name = "Name 1";
$std1->file = "f1335421531.zip";
$std1->desc = "";
$std2 = new stdClass ();
$std2->id = "2";
$std2->name = "Name 2";
$std2->file = "f1335421552.zip";
$std2->desc = "";
$std3 = new stdClass ();
$std3->id = "3";
$std3->name = "Name 3";
$std3->file = "f1335421588.zip";
$std3->desc = "";
$obj = array (
$std1,
$std2,
$std3
);
$image = array (
"image1.jpg",
"image2.jpg",
"image3.jpg"
);
for($i = 0; $i < count ( $obj ); $i ++) {
$obj [$i]->img = $image [$i];
}
var_dump ( $obj );
array
0 =>
object(stdClass)[1]
public 'id' => string '1' (length=1)
public 'name' => string 'Name 1' (length=6)
public 'file' => string 'f1335421531.zip' (length=15)
public 'desc' => string '' (length=0)
public 'img' => string 'image1.jpg' (length=10)
1 =>
object(stdClass)[2]
public 'id' => string '2' (length=1)
public 'name' => string 'Name 2' (length=6)
public 'file' => string 'f1335421552.zip' (length=15)
public 'desc' => string '' (length=0)
public 'img' => string 'image2.jpg' (length=10)
2 =>
object(stdClass)[3]
public 'id' => string '3' (length=1)
public 'name' => string 'Name 3' (length=6)
public 'file' => string 'f1335421588.zip' (length=15)
public 'desc' => string '' (length=0)
public 'img' => string 'image3.jpg' (length=10)
Try this:
$arr=array("image1.jpg","image2.jpg","image3.jpg");
$obj= array((object)array("id"=>"1","name"=>"name1","file"=>"asdb1.zip","desc"=>" "),
(object)array("id"=>"2","name"=>"name2","file"=>"asdb2.zip","desc"=>" "),
(object)array("id"=>"3","name"=>"name3","file"=>"asdb3.zip","desc"=>" ")
);
for($i=0;$i<count($obj);$i++){
$newObj=(array)$obj[$i];
$newObj['img']=$arr[$i];
$newArr[]=(object)$newObj;
}
echo "<pre>";var_dump($newArr);echo "</pre>";