使用php将目录中的图像加载到数组中

So I've killed an entire day trying to do something that would take someone who actually knows how to write php less than 2mins. Frustrating, but I learn by doing and trying to figure things out.

I'll feel like a failure for not getting this, but 8hrs and counting (yeah I know lame) is enough.

Can somebody tell me what's wrong with this equation...

$dir = '../folder';

$images_array = glob($dir.'*.jpg');

$values['options'] = array( '<img src="$images_array"/>');

It's probably obvious, but all I need is for the images in mysite.com/folder to be loaded into the $values['options'] array.

If I simply state the path to a single image in then the image is displayed (obviously because it's not reliant on anything else.)

Thanks.

@hellcode

Sorry about the mess in the 'comment' below your response. Unfortunately I couldn't get this to work? Maybe I need to provide more context.

The images in the folder are going to be used as checkbox items in a form. This was my original code (not working):

add_filter('frm_setup_new_fields_vars', 'frm_set_checked', 20, 2);
function frm_set_checked($values, $field){
  if($field->id == 187){
    $dir = '../folder';
    $images_array = glob($dir.'*.jpg');
    $values['options'] = array( '<img src="$images_array"/>');
    $values['use_key'] = true;
  }
  return $values;
}

I added your code like so:

add_filter('frm_setup_new_fields_vars', 'frm_set_checked', 20, 2);
function frm_set_checked($values, $field){
  if($field->id == 187){
    $dir = '../folder';
    $images_array = glob($dir.'*.jpg');
    $values['options'] = array();
    foreach($images_array as $image) {
      $values['options'][] = '<img src="'.$image.'"/>';
    }
    $values['use_key'] = true;
  }
  return $values;
}

But it didn't pull the files in unfortunately :(

Try:

$dir = '../folder';
$images_array = glob($dir.'*.jpg');
$values['options'] = array();
foreach($images_array as $image) {
  $values['options'][] = '<img src="'.$image.'"/>';
}

Well, one problem may be that the glob() function uses the current directory, which can be anything, unless you use the chdir() function.

One thing that is definitely a problem is that you are using glob()'s return value, $images_array, as a string. Because it is an array that will not work.

Here is something that should work.

// Allowed image formats (also known as a "whitelist")
$allowedFormats = ['jpg', 'jpeg', 'gif', 'png'];

// Array for holding any found images
$foundImages = [];

// Get the real path from the relative path
$path = realpath('../folder');
if ($path === false) {
    die('The path does not exist!');
}
// Open a folder handle
$folder = dir($path);

// Read what is in the folder
while (($item = $folder->read()) !== false) {

    // .. is the parent folder, . is the current folder
    if ($item === '..' or $item === '.') {
        continue;
    }
    // Find the last dot in the filename
    // If it was not found then not image file
    $lastDot = strrpos($item, '.');
    if ($lastDot === false) {
        continue;
    }
    // Get the filetype and make sure it is
    // an allowed format
    $filetype = substr($item, $lastDot);
    if ( ! in_array($filetype, $allowedFormats)) {
        continue;
    }
    // Okay, looks like an image!
    $foundImages[] = $item;
}
// Close the folder handle
$folder->close();