【问题标题】:call variable from inside foreach loop to put inside array从 foreach 循环内部调用变量以放入数组
【发布时间】:2017-07-21 12:38:35
【问题描述】:

我想要做的是获取我的$streamitem_imageuploaded 值,以便我可以将它传递到我的$json 数组中。这与嵌套循环有什么关系吗?当我当前将我的 json 数据发回时,我得到的只是未定义的变量 $streamitem_imageuploaded 和下面的代码。

if($checkphoto_id['photo_id']==0){
    $sqlhhh = "SELECT * FROM userphotos WHERE photo_name='".$checkphoto_id['photo_title']."' AND photo_ownerid='".$checkphoto_id['streamitem_creator']."' AND photo_datetime='".$checkphoto_id['streamitem_timestamp']."' ORDER BY photo_id ASC";
    $resulthhh = mysqli_query ($mysqli,$sqlhhh)or die(mysqli_error($mysqli)); 
    $photo_num=mysqli_num_rows($resulthhh);
    $images = array();
    while ($rowhhh = mysqli_fetch_assoc($resulthhh)) {
        $imageArray = array(
                            'data' => $rowhhh['photo_imagedata'],
                            'photo_streamitem_id' => $rowhhh['photo_streamitem_id'],
                            'id' => $rowhhh['photo_id']
                            );
        $images[] = $imageArray;
    }
    foreach ($images as  $image) {
        if($photo_num==1){
            $streamitem_imageuploaded='<a href="photo.php?pid='.$image['id'].'&streamitem_id='.$image['photo_streamitem_id'].'"><img class="stream_images" style="width:200px;height:200px;object-fit:cover;margin:2px;padding:2px;" src="data:image/jpeg;base64,'. base64_encode($image['data']) .'" /></a>';
        }else{
            $streamitem_imageuploaded[]='<a href="photo.php?pid='.$image['id'].'&streamitem_id='.$image['photo_streamitem_id'].'"><img class="stream_images" style="width:100px;height:100px;object-fit:cover;margin:2px;padding:2px;" src="data:image/jpeg;base64,'. base64_encode($image['data']) .'" /></a>';
        }
    }
}

将输出的值存储在我的 $json 数组中

$json = array(
    'posts' => array(),
    'count' => $rowcount,
    'commentlinktoggle' => $sendcommentlinktoggle,
    'streamitem_formholder' => $streamitem_formholder,
    'stopcommentsbutton' => $stopcommentsbutton,
    'streamitem_uploadimage_count' => $streamitem_uploadimage_count,
    'streamitem_imageuploaded' => $streamitem_imageuploaded,
);

更新

编辑改变了,结果还是一样

if($photo_num==0){
    $streamitem_imageuploaded='';
}
if($photo_num==1){
    $streamitem_imageuploaded='<a href="photo.php?pid='.$image['id'].'&streamitem_id='.$image['photo_streamitem_id'].'"><img class="stream_images" style="width:200px;height:200px;object-fit:cover;margin:2px;padding:2px;" src="data:image/jpeg;base64,'. base64_encode($image['data']) .'" /></a>';
}
if($photo_num>1){
    $streamitem_imageuploaded[]='<a href="photo.php?pid='.$image['id'].'&streamitem_id='.$image['photo_streamitem_id'].'"><img class="stream_images" style="width:100px;height:100px;object-fit:cover;margin:2px;padding:2px;" src="data:image/jpeg;base64,'. base64_encode($image['data']) .'" /></a>';
}

此代码在标准 php 页面中工作没有问题。只是在尝试从数组内部调用变量时不会。

【问题讨论】:

  • $streamitem_imageuploaded 应该是数组还是字符串?您可以在foreach 中同时使用它。
  • 如果$images 为空,则永远不会设置$streamitem_imageuploaded。另外,错误引用的是哪一行,这段代码中的哪一行?
  • 我得到了 var $streamitem_imageuploaded 的值。如上所述,您使用的 var 不一致。在一个块中作为字符串,在另一个块中作为数组。无论如何,如果脚本的其余部分返回值,两者都应该工作。我建议检查: 1. $checkphoto_id['photo_id']==0(真的是 0) 2. $photo_num 3. 检查 $images 的内容。通过取消 while 循环并保留图像数组并设置 $photo_num = 1; 来测试其余的执行;
  • 它应该是一个 json 字符串.. 但如果有多个图像,它会将它们输出到一个数组中。行错误是 $json 数组中的 `'streamitem_imageuploaded' => $streamitem_imageuploaded,``。我确定它是因为变量在 foreach 循环中找不到它。
  • 我从$streamitem_imageuploaded 中删除了数组[] ,但仍然出现同样的错误。

标签: php arrays json foreach


【解决方案1】:

这应该可行。添加了一些静态值来模拟事物。这可以正常工作,而不会为您的 $streamitem_imageuploaded var 生成 undefined。所以问题一定出在你的 mysql 代码或你的其他条件中。

$rowhhh =1;
$photo_num = 1;
$images = array();
  if ($rowhhh == 1) {
    $imageArray = array(
                        'data' => $rowhhh['photo_imagedata'],
                        'photo_streamitem_id' => $rowhhh['photo_streamitem_id'],
                        'id' => $rowhhh['photo_id']
                        );
    $images[] = $imageArray;
}
foreach ($images as  $image) {
    if($photo_num==1){
        $streamitem_imageuploaded='<a href="photo.php?pid='.$image['id'].'&streamitem_id='.$image['photo_streamitem_id'].'"><img class="stream_images" style="width:200px;height:200px;object-fit:cover;margin:2px;padding:2px;" src="data:image/jpeg;base64,'. base64_encode($image['data']) .'" /></a>';
    }else{
        $streamitem_imageuploaded[]='<a href="photo.php?pid='.$image['id'].'&streamitem_id='.$image['photo_streamitem_id'].'"><img class="stream_images" style="width:100px;height:100px;object-fit:cover;margin:2px;padding:2px;" src="data:image/jpeg;base64,'. base64_encode($image['data']) .'" /></a>';
    }
}
$json = array(
'posts' => array(),
'count' => $rowcount,
'commentlinktoggle' => $sendcommentlinktoggle,
'streamitem_formholder' => $streamitem_formholder,
'stopcommentsbutton' => $stopcommentsbutton,
'streamitem_uploadimage_count' => $streamitem_uploadimage_count,
'streamitem_imageuploaded' => $streamitem_imageuploaded,
);
print_r($json);

【讨论】:

  • 当我从我的原始代码中删除 if($checkphoto_id['photo_id']==0){ 并添加您的代码时,它可以工作。
  • 所以问题出在条件上......可能是一个检查为什么你的 $checkphoto_id['photo_id']==0 不评估为真的想法。如果您从答案中受益,请接受它。
【解决方案2】:

我需要做的就是在 foreach 循环之外添加一个数组,然后在我的 $json 数组中调用它

    $streamitem_imageuploaded = array();

我在研究我的答案时使用了这个。 Return all values stored in var outside foreach loop

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多