如何回显函数返回的关联数组的值
How to echo values of an associative array returned by function
我正在尝试按照 Whosebug 上其他地方的建议使用关联数组来完成某些事情,但我从未使用过数组,所以我很挣扎。我已经查过了,但结果比我更困惑!
事情是这样的:我想显示一张随机图像作为 Worpdress 网站的背景,并显示拍摄该图像的摄影师的姓名。所以我创建了一个函数,其中包括一个将图像与摄影师相关联的关联数组,以及一个用于检索照片和摄影师姓名的小脚本。这是我的功能:
function bg_image_info() {
$creditsList = array(
"1" => "Photographer 1",
"2" => "Photographer 2",
"3" => "Photographer 3",
...
...
"74" => "Photographer 74"
);
$root = get_stylesheet_directory_uri();
$dir = $root . "/images/bgs/";
$random = mt_rand(1,74);
$path = $root . "/images/bgs/bg_" . $random . ".jpg";
$credits = $creditsList["" . $random . ""];
return array($path, $credits);
}
它工作得很好,但有一个问题。我需要在两个不同的地方使用 $path 和 $credits 这两个值($path 作为 "src" 属性,$credits 在 "p" 标记中),所以经过一些研究后我尝试做的是再写这两个函数:
function bg_image_path() {
list($bgPath, $bgCredits) = bg_image_info($path, $credits);
echo $bgPath;
}
function bg_image_credits() {
list($bgPath, $bgCredits) = bg_image_info($path, $credits);
if($bgCredits) {
echo "Photo " . $bgCredits . "";
}
}
然后在我需要重视的地方调用每一个。但看起来这两个函数使用了不同的 $random 值,因为照片和制作人员不匹配(如果我将 mt_rand() 替换为用于测试目的的固定值,它们就会匹配)。
那么如何回显第一个函数返回的两个值,以便使用相同的 $random 值?
非常感谢任何帮助,谢谢!
关联数组使用命名键作为值,我们可以像索引数组一样以类似的方式创建它们。 foreach 用于遍历关联数组。
<?php
$colors = array("0"=>"Red","1"=>"Green","2"=>"Blue");
echo "0th element of array is " . $colors["0"];
echo "<br>";
//looping
foreach ($colors as $key=>$value){
echo "Key=".$key." value=".$value;
echo "<br>";
}
?>
输出:
0th element of array is Red
Key=0 value=Red
Key=1 value=Green
Key=2 value=Blue
当然会发生这种情况,因为您调用了该函数两次,每次
时间你想要路径或学分,从而产生两个不同的
随机值。
我认为不需要最后两个功能(bg_image_path()
和
bg_image_credits()
)。一个简单的解决方法是在
页面中的某个点(首次使用前)并保留这些变量
需要时使用。
list($bgPath, $bgCredits) = bg_image_info($path, $credits);
# [...]
<img src="<?= $bgPath ?>" />
# [...]
<p>Credits: <?= $bgCredits ?></p>
回复你的评论,我完全理解你想保留它
整洁并且不要重复你自己,但实际上,在这种情况下你只是
使用一个函数。重复调用函数的行没有错
在两个或更多地方。毕竟它应该是这样使用的:)
无论如何,如果你想通过不同的方式呼应你的价值观
函数,你必须在它们之间共享随机数,这样你就可以得到
同一件事情。我想到的第一种方法是生成
给自己编号,他们使用两个函数来回应正确的事情
把这个号码传给他们。但是既然你想保持它的功能
电话,我想你会更愿意这样做类似于你目前的设置
3个功能。可以做的是完全重写以生成
主函数中的值并将数据保留在其他函数中:
function
bg_image_info()
{
# note the global to avoid it being local only
global $bg_random = mt_rand(1,74);
}
function
bg_image_path()
{
echo get_stylesheet_directory_uri() .
"/images/bgs/bg_$bg_random.jpg";
}
function
bg_image_credits()
{
$creditsList = [
'none',
"Photographer 1",
"Photographer 2",
"Photographer 3",
# ...
"Photographer 74"
];
echo $creditsList[$bg_random];
}
<?php bg_image_info(); ?>
<img src="<? bg_image_path() ?>" />
<p>Credits: <? bg_image_credits() ?></p>
或者采用面向对象的方法!
class RandomImage
{
public $path;
public $credits;
public function
__construct()
{
$r = mt_rand(1,74);
$creditsList = [
'none',
"Photographer 1",
"Photographer 2",
"Photographer 3",
# ...
"Photographer 74"
];
$path = get_stylesheet_directory_uri() .
"/images/bgs/bg_$r.jpg";
$credits = $creditsList[$r];
}
}
<?php $img = new RandomImage; ?>
<img src="<?= $img->path ?>" />
<p>Credits: <?= $img->credits ?></p>
我正在尝试按照 Whosebug 上其他地方的建议使用关联数组来完成某些事情,但我从未使用过数组,所以我很挣扎。我已经查过了,但结果比我更困惑!
事情是这样的:我想显示一张随机图像作为 Worpdress 网站的背景,并显示拍摄该图像的摄影师的姓名。所以我创建了一个函数,其中包括一个将图像与摄影师相关联的关联数组,以及一个用于检索照片和摄影师姓名的小脚本。这是我的功能:
function bg_image_info() {
$creditsList = array(
"1" => "Photographer 1",
"2" => "Photographer 2",
"3" => "Photographer 3",
...
...
"74" => "Photographer 74"
);
$root = get_stylesheet_directory_uri();
$dir = $root . "/images/bgs/";
$random = mt_rand(1,74);
$path = $root . "/images/bgs/bg_" . $random . ".jpg";
$credits = $creditsList["" . $random . ""];
return array($path, $credits);
}
它工作得很好,但有一个问题。我需要在两个不同的地方使用 $path 和 $credits 这两个值($path 作为 "src" 属性,$credits 在 "p" 标记中),所以经过一些研究后我尝试做的是再写这两个函数:
function bg_image_path() {
list($bgPath, $bgCredits) = bg_image_info($path, $credits);
echo $bgPath;
}
function bg_image_credits() {
list($bgPath, $bgCredits) = bg_image_info($path, $credits);
if($bgCredits) {
echo "Photo " . $bgCredits . "";
}
}
然后在我需要重视的地方调用每一个。但看起来这两个函数使用了不同的 $random 值,因为照片和制作人员不匹配(如果我将 mt_rand() 替换为用于测试目的的固定值,它们就会匹配)。
那么如何回显第一个函数返回的两个值,以便使用相同的 $random 值?
非常感谢任何帮助,谢谢!
关联数组使用命名键作为值,我们可以像索引数组一样以类似的方式创建它们。 foreach 用于遍历关联数组。
<?php
$colors = array("0"=>"Red","1"=>"Green","2"=>"Blue");
echo "0th element of array is " . $colors["0"];
echo "<br>";
//looping
foreach ($colors as $key=>$value){
echo "Key=".$key." value=".$value;
echo "<br>";
}
?>
输出:
0th element of array is Red
Key=0 value=Red
Key=1 value=Green
Key=2 value=Blue
当然会发生这种情况,因为您调用了该函数两次,每次 时间你想要路径或学分,从而产生两个不同的 随机值。
我认为不需要最后两个功能(bg_image_path()
和
bg_image_credits()
)。一个简单的解决方法是在
页面中的某个点(首次使用前)并保留这些变量
需要时使用。
list($bgPath, $bgCredits) = bg_image_info($path, $credits);
# [...]
<img src="<?= $bgPath ?>" />
# [...]
<p>Credits: <?= $bgCredits ?></p>
回复你的评论,我完全理解你想保留它 整洁并且不要重复你自己,但实际上,在这种情况下你只是 使用一个函数。重复调用函数的行没有错 在两个或更多地方。毕竟它应该是这样使用的:)
无论如何,如果你想通过不同的方式呼应你的价值观 函数,你必须在它们之间共享随机数,这样你就可以得到 同一件事情。我想到的第一种方法是生成 给自己编号,他们使用两个函数来回应正确的事情 把这个号码传给他们。但是既然你想保持它的功能 电话,我想你会更愿意这样做类似于你目前的设置 3个功能。可以做的是完全重写以生成 主函数中的值并将数据保留在其他函数中:
function
bg_image_info()
{
# note the global to avoid it being local only
global $bg_random = mt_rand(1,74);
}
function
bg_image_path()
{
echo get_stylesheet_directory_uri() .
"/images/bgs/bg_$bg_random.jpg";
}
function
bg_image_credits()
{
$creditsList = [
'none',
"Photographer 1",
"Photographer 2",
"Photographer 3",
# ...
"Photographer 74"
];
echo $creditsList[$bg_random];
}
<?php bg_image_info(); ?>
<img src="<? bg_image_path() ?>" />
<p>Credits: <? bg_image_credits() ?></p>
或者采用面向对象的方法!
class RandomImage
{
public $path;
public $credits;
public function
__construct()
{
$r = mt_rand(1,74);
$creditsList = [
'none',
"Photographer 1",
"Photographer 2",
"Photographer 3",
# ...
"Photographer 74"
];
$path = get_stylesheet_directory_uri() .
"/images/bgs/bg_$r.jpg";
$credits = $creditsList[$r];
}
}
<?php $img = new RandomImage; ?>
<img src="<?= $img->path ?>" />
<p>Credits: <?= $img->credits ?></p>