如何通过使用一个键来组合两个数组?

问题描述:

有很多答案,但我似乎无法得到这个权利,毕竟,这个帖子看起来很大,但似乎只是。这就是我所拥有的,以及我所尝试过的。如何通过使用一个键来组合两个数组?

Array 
(
    [0] => image 1 
    [1] => image 2 
) 

Array 
(
    [name] => Array 
     (
      [0] => 0.14997300-1503597010599f11d2249df30.jpg 
      [1] => 0.24654000-150113339659797a543c31f24.jpg 
     ) 

    [type] => Array 
     (
      [0] => image/jpeg 
      [1] => image/jpeg 
     ) 

    [tmp_name] => Array 
     (
      [0] => C:\Users\--\AppData\Local\Temp\php509E.tmp 
      [1] => C:\Users\--\AppData\Local\Temp\php509F.tmp 
     ) 

    [error] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [size] => Array 
     (
      [0] => 55560 
      [1] => 9425 
     ) 

) 

我已经试过:

$instructions = $_POST['instructions']; 
$image = $_FILES['instructions_image']; 

$result = array(); 
foreach($instructions as $index => $key){ 
    $t = array(); 
    foreach($image as $img){ 
     $t[] = $img; 
    } 
    $result[$key] = $t; 
} 

而且结果是:

Array 
(
    [image 1] => Array 
     (
      [0] => Array 
       (
        [0] => 0.14997300 1503597010599f11d2249df30.jpg 
        [1] => 0.24654000 150113339659797a543c31f24.jpg 
       ) 

      [1] => Array 
       (
        [0] => image/jpeg 
        [1] => image/jpeg 
       ) 

      [2] => Array 
       (
        [0] => C:\Users\--\AppData\Local\Temp\phpBAD5.tmp 
        [1] => C:\Users\--\AppData\Local\Temp\phpBAE6.tmp 
       ) 

      [3] => Array 
       (
        [0] => 0 
        [1] => 0 
       ) 

      [4] => Array 
       (
        [0] => 55560 
        [1] => 9425 
       ) 

     ) 

    [image 2] => Array 
     (
      [0] => Array 
       (
        [0] => 0.14997300 1503597010599f11d2249df30.jpg 
        [1] => 0.24654000 150113339659797a543c31f24.jpg 
       ) 

      [1] => Array 
       (
        [0] => image/jpeg 
        [1] => image/jpeg 
       ) 

      [2] => Array 
       (
        [0] => C:\Users\--\AppData\Local\Temp\phpBAD5.tmp 
        [1] => C:\Users\--\AppData\Local\Temp\phpBAE6.tmp 
       ) 

      [3] => Array 
       (
        [0] => 0 
        [1] => 0 
       ) 

      [4] => Array 
       (
        [0] => 55560 
        [1] => 9425 
       ) 

     ) 

) 

我不确定为什么结果有相同的2两个指标,但我还想知道我们如何保留$ _FILES提供的数组键名,例如:name,type,tmp_name,error和size。

以下是我期待的内容(我包含了额外的信息,例如我没有提供的密钥名称,也没有用我的代码,对此感到抱歉,一直停留了12个小时,但只是任何解释来设置我在正确的道路将帮助我巨大):

Array 
(
    [0] => Array 
     (
      [text] => image 1, 
      [image_data] => Array (
       [name] => 0.14997300 1503597010599f11d2249df30.jpg 
       [type] => image/jpeg 
       [tmp_name] => C:\Users\--\AppData\Local\Temp\php509E.tmp 
       [error] => 0 
       [size] => 55560 
      ) 

     ) 

    [1] => Array 
     (
      [text] => image 2, 
      [image_data] => Array (
       [name] => 0.24654000 150113339659797a543c31f24.jpg 
       [type] => image/jpeg 
       [tmp_name] => C:\Users\--\AppData\Local\Temp\php509E.tmp 
       [error] => 0 
       [size] => 9425 
      ) 

     ) 

) 
+2

请分享您预期的结果。 –

+0

要保留密钥名称,请检查内部的'foreach()'循环。您正在跳过该数组的索引,并通过'[]' – insider

+0

构建带有数字索引的新数组感谢您指出@insider – Craig

希望这一个将有所帮助。这里我们使用简单foreach循环array_keysarray_combinearray_column

Try this code snippet here

$result=array(); 
foreach($images as $key => $image) 
{ 
    $result[]=array(
     "text"=>$image, 
     "image_data"=>array_combine(
       array_keys($instructions), 
       array_column($instructions,$key)) 
    ); 
} 
print_r($result); 
+1

尽管它很有帮助,但我去阅读理解为什么我得到了不同的结果,即使我写了与你共享的完全相同的代码,发现你简单地混合了指令和图像变量名哈哈!这是完美的,谢谢你指导我在正确的方向Sahil。 – Craig

+1

@SahilGulati你的脚本丢失了'image_data'子项目键( - ; – Neodan

+0

@John很高兴帮助你我的朋友...... :) –

你需要写一个你的逻辑组合这些阵列自定义脚本。对于这个任务,你可以使用这个数组函数:array_combine,array_keys,array_column

实施例:

<?php 
$a1 = ['image 1', 'image 2']; 
$a2 = [ 
    'name' => ['0.14997300-1503597010599f11d2249df30.jpg', '0.24654000-150113339659797a543c31f24.jpg'], 
    'type' => ['image/jpeg', 'image/jpeg'], 
    'tmp_name' => ['C:\Users\--\AppData\Local\Temp\php509E.tmp', 'C:\Users\--\AppData\Local\Temp\php509F.tmp'], 
    'error' => [0, 0], 
    'size' => [55560, 9425] 
]; 

$result = []; 
foreach ($a1 as $k => $v) { 
    $result[] = [ 
     'text' => $v, 
     'image_data' => array_combine(array_keys($a2), array_column($a2, $k)) 
    ]; 
} 

print_r($result); 

这将帮助你 $解析度=阵列(0 => '图像1',1 => '图像2');

  $valu=array('name' => array(0=> '0.14997300-1503597010599f11d2249df30.jpg',1 => '0.24654000-150113339659797a543c31f24.jpg' 
        ),'type' => array(0 => 'image/jpeg',1 => 'image/jpeg'), 'tmp_name'=> array(0 => 'C:\Users\--\AppData\Local\Temp\php509E.tmp',1 => 'C:\Users\--\AppData\Local\Temp\php509F.tmp'),'error' => array(0 => 0,1 => 0),'size' => array(0 => 55560, 1 => 9425) 
        ); 

      $newarr=array(); 
      foreach($res as $key=>$val) 
      { 
       $newarr[$key]['text']=$val; 
       $newarr[$key]['image_data']=array('name'=>$valu['name'][$key],'type'=>$valu['type'][$key],'tmp_name'=>$valu['tmp_name'][$key],'error'=>$valu['error'][$key],'size'=>$valu['size'][$key]); 
      } 
      echo '<pre>'; 
      print_r($newarr); 

试试这个

$fileData = array(
    'name' => ['0.14997300-1503597010599f11d2249df30.jpg','0.24654000-150113339659797a543c31f24.jpg'], 
    'type' => ['image/jpeg','image/jpeg'], 
    'tmp_name' => ['C:\Users\--\AppData\Local\Temp\php509E.tmp','C:\Users\--\AppData\Local\Temp\php509F.tmp'], 
    'error' => [0,0], 
    'size' => [55560,9425]); 

$someArr = array('image 1','image 2'); 
$fileData['somedata'] = $someArr; 


function reFileData($fileData) { 
    $arr = array(); 
    $keys = array_keys($fileData); 
    for ($i=0; $i < count($fileData['name']); $i++) { 
     foreach ($keys as $key) { 
      $arr[$i][$key] = $fileData[$key][$i]; 
     } 
    } 
    return $arr; 
} 

print_r(reFileData($fileData));