2017-04-14 5 views
0

にマップ:PHPの配列操作 - 特定のセットを操作し、バックiはデータベースからデータを引き出し、フォーマットの配列を取得していアレイ

array(2) { 
    [0]=> 
    array(3) { 
    ["topicname"]=> 
    string(19) "Signs giving orders" 
    ["title"]=> 
    array(4) { 
     [0]=> 
     string(4) "Stop" 
     [1]=> 
     string(8) "No entry" 
     [2]=> 
     string(10) "No cycling" 
     [3]=> 
     string(17) "No motor vehicles" 
    } 
    ["filename"]=> 
    array(4) { 
     [0]=> 
     string(44) "DQP0GVcUA2dG8ZfqeVYLO68YodgYnJMOjJw2o2iC.png" 
     [1]=> 
     string(44) "vWUcHGX3VVKPT08JXh9mAqZ40pT0vfDJ78Yoqovz.png" 
     [2]=> 
     string(44) "bplX8bbwHzHKX9n6SvvQiYNhkWwKxi2bhsrQ94U2.png" 
     [3]=> 
     string(44) "8KAEovxQn3EgzHoZg1euSgNYTFupnLdKusJ4SIEP.png" 
    } 
    } 
    [1]=> 
    array(3) { 
    ["topicname"]=> 
    string(13) "Warning Signs" 
    ["title"]=> 
    array(4) { 
     [0]=> 
     string(29) "Road narrows ahead both sides" 
     [1]=> 
     string(47) "Road narrows on right (left if symbol reversed)" 
     [2]=> 
     string(10) "Crossroads" 
     [3]=> 
     string(22) "Junction on bend ahead" 
    } 
    ["filename"]=> 
    array(4) { 
     [0]=> 
     string(44) "uZ7fnDjlYfKU3pdSQ7wAq4siFryA6jSEitmRyPhp.png" 
     [1]=> 
     string(44) "4pslo6cC0I2E606DscWxiDD3sCBW7ZGaESQES4r0.png" 
     [2]=> 
     string(44) "xdVBMpV6PTLtX48M67kfWOqy59rsYMDZMuWbqDwl.png" 
     [3]=> 
     string(44) "hLtIGikARgARqmSqit4mqNXRFJthipH6O5vqxlbN.png" 
    } 
    } 
} 

上記アレイは、以下のビットによって生成され:ここから

$data = array(); 

foreach ($content as $value) 
{ 
     $title = explode(',', $value->title); 
     $filename = explode(',', $value->filename); 
     $d = array(); 

     $d['topicname'] = $value->topicname; 
     $d['title'] = $title; 
     $d['filename'] = $filename; 

     $data[] = $d; 

} 
var_dump($data); 

、私の目標は["filename"]を取得し、最後に、私は、構造体の配列を取得するように設定され、配列に戻し、それを操作することである。

array(2) { 
    [0]=> 
    array(3) { 
    ["topicname"]=> 
    string(19) "Signs giving orders" 
    ["title"]=> 
    array(4) { 
     [0]=> 
     string(4) "Stop" 
     [1]=> 
     string(8) "No entry" 
     [2]=> 
     string(10) "No cycling" 
     [3]=> 
     string(17) "No motor vehicles" 
    } 
    ["filename"]=> 
    array(4) { 
     [0]=> 
     string(44) "/storage/images/DQP0GVcUA2dG8ZfqeVYLO68YodgYnJMOjJw2o2iC.png" 
     [1]=> 
     string(44) "/storage/images/vWUcHGX3VVKPT08JXh9mAqZ40pT0vfDJ78Yoqovz.png" 
     [2]=> 
     string(44) "/storage/images/bplX8bbwHzHKX9n6SvvQiYNhkWwKxi2bhsrQ94U2.png" 
     [3]=> 
     string(44) "/storage/images/8KAEovxQn3EgzHoZg1euSgNYTFupnLdKusJ4SIEP.png" 
    } 
    } 
    [1]=> 
    array(3) { 
    ["topicname"]=> 
    string(13) "Warning Signs" 
    ["title"]=> 
    array(4) { 
     [0]=> 
     string(29) "Road narrows ahead both sides" 
     [1]=> 
     string(47) "Road narrows on right (left if symbol reversed)" 
     [2]=> 
     string(10) "Crossroads" 
     [3]=> 
     string(22) "Junction on bend ahead" 
    } 
    ["filename"]=> 
    array(4) { 
     [0]=> 
     string(44) "/storage/images/uZ7fnDjlYfKU3pdSQ7wAq4siFryA6jSEitmRyPhp.png" 
     [1]=> 
     string(44) "/storage/images/4pslo6cC0I2E606DscWxiDD3sCBW7ZGaESQES4r0.png" 
     [2]=> 
     string(44) "/storage/images/xdVBMpV6PTLtX48M67kfWOqy59rsYMDZMuWbqDwl.png" 
     [3]=> 
     string(44) "/storage/images/hLtIGikARgARqmSqit4mqNXRFJthipH6O5vqxlbN.png" 
    } 
    } 
} 

これでファイル名がどのように変更されたかを確認します。上記を達成するために、私は次のように、アレイは、その後、私の操作を行い、var_dump($data);から返され得る:

foreach ($data as $val) 
{ 
    foreach ($val['filename'] as $filecheck) 
    { 

      //get extension since images and videos are in separate folders 
      $file_ext = File::extension($filecheck); 
      $images = array('jpg','gif','png'); 
      $videos = array('mp4', 'webm', 'ogg'); 

      if(in_array($file_ext, $images)) 
      { 
       $filename = 'images/'.$filecheck; 
       $file_url = Storage::url($filename); 
       $filecheck = $file_url; 
      } 
      elseif(in_array($extension, $videos)) 
      { 
       $filename = 'videos/'.$filecheck; 
       $file_url = Storage::url($filename); 
       $filecheck = $file_url; 
      } 
      $file_array = array(); 
      $file_array['filename'] = $filecheck; 
     } 
} 

上記の目的は次のとおりです。データベースから返されたファイル名を取得し、その適切なにそれをマップするためにファイルパス。 var_dump($file_array)の内容は次のとおりです。

string(60) "/storage/images/DQP0GVcUA2dG8ZfqeVYLO68YodgYnJMOjJw2o2iC.png" 
string(60) "/storage/images/vWUcHGX3VVKPT08JXh9mAqZ40pT0vfDJ78Yoqovz.png" 
string(60) "/storage/images/bplX8bbwHzHKX9n6SvvQiYNhkWwKxi2bhsrQ94U2.png" 
string(60) "/storage/images/8KAEovxQn3EgzHoZg1euSgNYTFupnLdKusJ4SIEP.png" 
string(60) "/storage/images/uZ7fnDjlYfKU3pdSQ7wAq4siFryA6jSEitmRyPhp.png" 
string(60) "/storage/images/4pslo6cC0I2E606DscWxiDD3sCBW7ZGaESQES4r0.png" 
string(60) "/storage/images/xdVBMpV6PTLtX48M67kfWOqy59rsYMDZMuWbqDwl.png" 
string(60) "/storage/images/hLtIGikARgARqmSqit4mqNXRFJthipH6O5vqxlbN.png" 

これは私が立ち往生する場所です。どうすればこの配列を配列にマップできますか?

答えて

2

あなたは、元の配列すなわち上のデータ を設定する必要がありますので、PHPでforeachのは、その配列のコピーで動作します。:

foreach ($data as $index => $val) { 
    foreach ($val['filename'] as $fileIndex => $filecheck) { 
     // convert file name 

     $data[$index]['filename'][$fileIndex] = $filename; 
    } 
} 
0

あなたはこのコード

foreach ($originalArray as $subArray) { 
    $i = 0; 
    foreach ($subArray['filename'] as $filePath) { 
     $filePath = //do your path thing here 
     $subArray['filename'][$i] = $filePath; 
     $i++; 
    } 
} 
を使用することができます