繁体   English   中英

如何替换PHP中的数组项?

[英]How to replace array item in php?

我有2个数组:

1st:$ data与旧的img和链接

array:4 [▼
  0 => array:2 [▼
    "img" => "Koala.jpg"
    "link" => "http://site.loc/1"
  ]
  1 => array:2 [▼
    "img" => "Jellyfish.jpg"
    "link" => "http://site.loc/2"
  ]
  2 => array:2 [▼
    "img" => "Hydrangeas.jpg"
    "link" => "http://site.loc/3"
  ]
  3 => array:2 [▼
    "img" => "Penguins.jpg"
    "link" => "http://site.loc/4"
  ]
]

第二名:$ images张新图片

array:4 [▼
  "slide0" => UploadedFile {#241 ▼
    -test: false
    -originalName: "Lighthouse.jpg"
    ....
  }
  "slide1" => UploadedFile {#239 ▼
    -test: false
    -originalName: "Penguins.jpg"
   ....
  }
  "slide2" => UploadedFile {#234 ▼
    -test: false
    -originalName: "Desert.jpg"
    ....
  }
  "slide3" => UploadedFile {#238 ▼
    -test: false
    -originalName: "Tulips.jpg"
   ....
  }
]

如何正确执行此替换:

"img" => "Koala.jpg" to "img" => "Lighthouse.jpg",
"img" => "Jellyfish.jpg" to "img" => "Penguins.jpg",
"img" => "Hydrangeas.jpg" to "img" => "Desert.jpg",
"img" => "Penguins.jpg" to "img" => "Tulips.jpg",

我试图以这种方式做到这一点:

foreach($data as $key=>&$item){
            if(isset($images['slide'.$key])){
                $item['img']=$images['slide'.$key]->getClientOriginalName();
            }
        }

但是最后一个数组与pre-last重复:

array(2) { ["img"]=> string(14) "Hydrangeas.jpg" ["link"]=> string(19) "http://site.loc/1" }
array(2) { ["img"]=> string(14) "Lighthouse.jpg" ["link"]=> string(19) "http://site.loc/2" }
array(2) { ["img"]=> string(13) "Jellyfish.jpg" ["link"]=> string(19) "http://site.loc/3" } 
array(2) { ["img"]=> string(13) "Jellyfish.jpg" ["link"]=> string(19) "http://site.loc/3" } 

是否可以防止重复,或者我应该在foreach之后再使用其他方法?

另外,我注意到当我用foreach替换时,多维数组的最后一个数组有&

array:4 [▼
  0 => array:2 [▼
    "img" => "Hydrangeas.jpg"
    "link" => "http://site.loc/1"
  ]
  1 => array:2 [▼
    "img" => "Koala.jpg"
    "link" => "http://site.loc/2"
  ]
  2 => array:2 [▼
    "img" => "Jellyfish.jpg"
    "link" => "http://site.loc/3"
  ]
  3 => & array:2 [▼
    "img" => "Tulips.jpg"
    "link" => "http://site.loc/4"
  ]
]

也许那就是重复的原因?

为此,您必须具有两个数组,然后可以使用array_replace()替换它们。

<?php
$a1=array("abc","def");
$a2=array("xyz","lmn");
print_r(array_replace($a1,$a2));
?>

输出将是

Array ( [0] => xyz [1] => lmn ) 

@Batmannn,您可以像下面这样:

<?php
    $arr1 = array(
               array(
                "img" => "Koala.jpg",
                "link" => "http://site.loc/1"
               ),
               array(
                "img" => "Jellyfish.jpg",
                "link" => "http://site.loc/2"
               ),
               array(
                "img" => "Hydrangeas.jpg",
                "link" => "http://site.loc/3"
               ),
               array(
                "img" => "Penguins.jpg",
                "link" => "http://site.loc/4"
               )
            );

    $arr2 = array(
                  "slide0" =>
                  array(
                    "test"=> false,
                    "originalName"=> "Lighthouse.jpg"
                  ),
                  "slide1" =>
                  array(
                    "test"=> false,
                    "originalName"=> "Penguins.jpg"
                  ),
                  "slide2" =>
                  array(
                    "test"=> false,
                    "originalName"=> "Desert.jpg"
                  ),
                  "slide3" =>
                  array(
                    "test"=> false,
                    "originalName"=> "Tulips.jpg"
                  )
            );
    $newImageName = array_column($arr2, "originalName");

    foreach ($arr1 as $key => $value) {
        $arr1[$key]["img"] = $newImageName[$key];
    }

    echo "<pre>";
    print_r($arr1); // final result

试试看,没有任何功能就可以实现,

<?php
$arr1 = array(
   array(
    "img" => "Koala.jpg",
    "link" => "http://site.loc/1"
   ),
   array(
    "img" => "Jellyfish.jpg",
    "link" => "http://site.loc/2"
   ),
   array(
    "img" => "Hydrangeas.jpg",
    "link" => "http://site.loc/3"
   ),
   array(
    "img" => "Penguins.jpg",
    "link" => "http://site.loc/4"
   )
);

  $arr2 = array(
      "slide0" =>
      array(
        "test"=> false,
        "originalName"=> "Lighthouse.jpg"
      ),
      "slide1" =>
      array(
        "test"=> false,
        "originalName"=> "Penguins.jpg"
      ),
      "slide2" =>
      array(
        "test"=> false,
        "originalName"=> "Desert.jpg"
      ),
      "slide3" =>
      array(
        "test"=> false,
        "originalName"=> "Tulips.jpg"
      )
);

foreach ($arr1 as $key => $value) {
    $arr1[$key]["img"] = $arr2['slide'.$key]['originalName'];
}
var_dump($arr1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM