Houston Molinar
Houston Molinar

Reputation: 191

Trying to loop through an array to return a filepath name

I'm new to PHP so please bear with me. I'm practicing coding for real situations so I mimicked a database by storing my image paths in an associate array so that I could create a function that would return the path name and thus just call the function to echo out my image.

My problem is it's only returning the last item in my array. I need the function to loop through the array for every item and return the file path so that I can store it in $images and then echo that out where I need to.

CODE:

<?php


$images = array(
array('name'  => 'image_00', 'path'  =>  'images/image-00.jpg'),
array('name'  => 'image_01', 'path'  =>  'images/image-01.jpg'),
array('name'  => 'image_02', 'path'  =>  'images/image-02.jpg')
);

function returnPath($filename, $arr) {

    $path = array();

    foreach ($arr as $file) {
        $path = $file[$filename];
    }

    return $path;
}

$images = returnPath('path', $images);

?>

<!DOCTYPE html>
<html>
<head>
    <title>Images Project</title>
</head>
<body>
    <img src="<?php echo $images; ?>"/>
</body>
</html>

Upvotes: 0

Views: 499

Answers (2)

Sathya Baman
Sathya Baman

Reputation: 3515

just read on Multi dimensional array. its very simple.

  <?php

    $images = array(
    array('name'  => 'image_00', 'path'  =>  'images/image-00.jpg'),
    array('name'  => 'image_01', 'path'  =>  'images/image-01.jpg'),
    array('name'  => 'image_02', 'path'  =>  'images/image-02.jpg')
    );

    ?>


    <!DOCTYPE html>
    <html>
    <head>
        <title>Images Project</title>
    </head>
    <body>

    <?php
        for($i=0;$i<sizeof($images);$i++){ ?>
        <img src="<? echo $images[$i]['path']; ?>"/>
    <?php }?>

    </body>
    </html>

Upvotes: 0

Darren
Darren

Reputation: 13128

The issue is that you're over-writing the $path variable in your returnPath function.

What you want is this:

foreach ($arr as $file) {
    $path[] = $file[$filename];
}

Which in turn will give you an array of the paths that you can itterate over like this:

$images = returnPath('path', $images);

<body>
<?php 
foreach($images as $image) {
    echo '<img src="'. $image .'" />';
}
?>
</body>

I also strongly agree with koala_dev's comment. The function isn't really effective/useful.

Since you already have the $images array, just:

foreach($images as $img) {
    echo $img['path'];
}

Or even make the function useful by returning formatted html <img> tags to print to the HTML DOM :-)

Upvotes: 2

Related Questions