【问题标题】:How to make a variable from an array如何从数组中生成变量
【发布时间】:2015-05-16 22:29:53
【问题描述】:

我正在尝试将数组项分配到数组中。 这是我的代码;

$sqlText['attach']="SELECT attachments.disk_directory, 
                attachments.disk_filename, 
                attachments.digest,
                attachments.filename
                FROM attachments
                WHERE container_id = $myPage
                GROUP BY digest";

$sqlQuery_MainMenu = mysql_db_query($db, $sqlText['attach'], $connection) or die("DB CON ERROR");
$directories=array();
$files=array();
$file_names=array();
while($mm_Content=mysql_fetch_array($sqlQuery_MainMenu)){
    $directories[]=$mm_Content[disk_directory];
    $files[]=$mm_Content[disk_filename];
    $file_names[]=$mm_Content[filename];

}   
foreach($directories as $index => $directory){
 $attachment = $directory.'/'.$files[$index].'<pre>';

  }
    foreach($file_names as $file_name){
 $file_name.'<pre>';

  }         

我的目标是从 foreach 获取所有结果并将它们分配给一个变量,然后再使用该变量。

我所做的只是从数组中带来一项。我尝试了 php extract 和其他一些东西,但都没有奏效。 我只是想将 foreach 循环分配给一个变量 非常感谢您的建议。

foreach($directories as $index => $directory){
 echo $directory.'/'.$files[$index].'<pre>';

  }

例如返回 5 个结果;

/documents/directory/filename.jpg
/documents/directory/filename1.jpg
/documents/directory5/somename.jpg

我只想从 foreach 循环中得到这个结果并将它们分配给一个变量。当我使用这个新变量时,我希望它具有上述示例的值。

我想将此附件发送到 PHPMailer 附件 假设有两个变量文件和名称来自 foreach 循环。 在 PHPMailer 上;

$mail->addAttachment($files, $names);

如果这不起作用,我将更改我的代码;

foreach($directories as $index => $directory){
 $attachment = .'/'.$files[$index].'<pre>';
    '$mail->addAttachment('.$attachment')';

  }  

忘记文件名。

【问题讨论】:

  • 你想做什么,你遇到了什么问题?如果你能更清楚一点,那会有所帮助。
  • @ NaijaProgrammer 感谢您提醒我更新了我的问题。我的目标是从 foreach 获取所有结果并将它们分配到一个变量中并稍后使用该变量。

标签: php mysql arrays


【解决方案1】:

您可以使用 var_dump 或 return 来调试变量内容:

var_dump($var); // Automatic echo
print_r($var); // Automatic echo
print_r($var, true); // Return

您可以使用 foreach 遍历变量。

【讨论】:

  • 除了所有这些 cmets 和提示之外,答案在哪里?
  • 非常感谢您的回答,但这不是我想要的。我想从 foreach 中获取所有结果并将其用于变量。尽管var_dump($var); 在我的情况下也只打印了一个结果。
【解决方案2】:

我可能不完全理解您要做什么,但我在您的代码中观察到一两件事。首先,在while 循环中,$mm_Content 数组成员应该有引号。目前,您拥有的是:

while($mm_Content=mysql_fetch_array($sqlQuery_MainMenu))
{
   $directories[]=$mm_Content[disk_directory];
   $files[]=$mm_Content[disk_filename];
   $file_names[]=$mm_Content[filename];
} 

你可以这样重写:

while($mm_Content=mysql_fetch_array($sqlQuery_MainMenu))
{
   $directories[]=$mm_Content["disk_directory"];
   $files[]=$mm_Content["disk_filename"];
   $file_names[]=$mm_Content["filename"];
} 

话虽如此,您的 foreach 循环并没有回显您想要的内容,因为在每次后续迭代中,您都会用新的值覆盖 $attachment 变量中的前一个值。为了让它保存循环中的每个值,您必须按照您对$directories 变量的处理方式:将其声明为一个数组并将每个后续循环值分配给一个新的数组元素。应用此原则,您的代码应如下所示:

$attachments = array(); //create and initialise the attachments array
$counter = 0; //create and initialise a counter variable
foreach($directories as $index => $directory)
{
   $attachment[$counter] = $directory.'/'.$files[$index];
}
foreach($file_names as $file_name)
{
    $attachment[$counter] .= '<pre>'. $file_name.'</pre>';

    ++$counter; //increment the counter variable
}

然后,要打印出这些值,您可以:

foreach($attachments AS $attachment)
{
   echo $attachment;
}

或者,使用for 循环:

for($i = 0; $i < count($attachments) $i++)
{
   echo $attachments[$i];
}

【讨论】:

  • 非常感谢您的帮助和解答。我的目标只是将 foreach 循环分配给一个变量。我已经尝试过你的建议,但结果是 Array。
猜你喜欢
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多