如何读取关联数组的数组键?代码输出Array而非预期值求助
问题分析与解决
你的代码问题出在两个核心点:
- 多余的数组嵌套:
get_post_meta()默认返回的就是数组(第三个参数默认值为false),你额外用array()包裹返回值,导致$content、$media、$yt变成二维数组,输出时自然显示Array。 - 循环边界错误:
$i <= $max会让循环多执行一次,容易触发数组越界问题,应该改成$i < $max。
修正后的代码
// 去掉多余的array()包裹,直接接收get_post_meta的返回值 $content = get_post_meta($postId, 'content'); $media = get_post_meta($postId, 'media'); $yt = get_post_meta($postId, 'youtube'); // 取三个数组的最大长度,循环时用小于号避免越界 $max = max(count($content), count($media), count($yt)); $combined = []; for($i = 0; $i < $max; $i++) { if(isset($content[$i])) { $combined[] = ["type" => "content", "value" => $content[$i]]; } if(isset($media[$i])) { $combined[] = ["type" => "media", "value" => $media[$i]]; } if(isset($yt[$i])) { $combined[] = ["type" => "youtube", "value" => $yt[$i]]; } } foreach ($combined as $key => $val) { echo '<li>'.$val['value'].'</li>'; }
补充优化方案
如果你的自定义字段是单值(非多值),可以给get_post_meta()传第三个参数true,直接获取字符串值,代码会更简洁:
$content = get_post_meta($postId, 'content', true); $media = get_post_meta($postId, 'media', true); $yt = get_post_meta($postId, 'youtube', true); $combined = [ ["type" => "content", "value" => $content], ["type" => "media", "value" => $media], ["type" => "youtube", "value" => $yt] ]; foreach ($combined as $val) { echo '<li>'.$val['value'].'</li>'; }
内容的提问来源于stack exchange,提问作者rob.m
相关产品推荐
相关产品推荐

