【问题标题】:How to replace array item in php?如何替换php中的数组项?
【发布时间】:2017-07-31 17:56:15
【问题描述】:

我有 2 个数组:

第一个:带有旧图像和链接的 $data

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"
  ]
]

也许这就是重复的原因?

【问题讨论】:

  • 我无法重现可能存在于其他地方的问题。 eval.in/752229

标签: php arrays multidimensional-array replace foreach


【解决方案1】:

@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

【讨论】:

    【解决方案2】:

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

    例子

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

    输出将是

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-16
        • 1970-01-01
        • 2011-08-20
        • 2012-01-26
        • 1970-01-01
        • 2017-04-15
        • 2012-03-13
        • 2013-11-16
        • 2021-04-06
        相关资源
        最近更新 更多