wordpress 如何合并3个阵列保持其 meta密钥?

r7knjye2  于 2022-11-22  发布在  WordPress
关注(0)|答案(2)|浏览(201)

我从一些WordPress自定义字段得到一些数组:

$content = array(get_post_meta($postId, 'content'));
$media = array(get_post_meta($postId, 'media'));
$yt = array(get_post_meta($postId, 'youtube'));

然后我需要按顺序打印,例如:
媒介
内容物
链接
嵌入
并对每个值重复该序列

media

content

LInk

Embed

对于序列,我将使用以下内容:

echo '<ul>';
for ($i = 0; $i < count($all_array['media']); $i++) {
    for ($j = 0; $j < count($all_array['content']); $j++) {
        for ($k = 0; $k < count($all_array['youtube']); $k++) {
            echo '<li>media->' . $all_array['media'][$i] . '</li>';
            echo '<li>content->' . $all_array['content'][$j] . '</li>';
            echo '<li>link->' . $all_array['link'][$k] . '</li>';
        }
    }
}
echo '</ul>';

但是我在合并3个字段时做了一些错误的操作,就好像我在运行for位之前做了一个var_dump,比如

echo '<pre>' . var_export($all_array, true) . '</pre>';

那么我得到的结果是这样的,我不能按我的意愿迭代:

array (
  0 => 
  array (
    0 => 
    array (
      0 => '
brother

',
      1 => '
Lorem

',
      2 => '
End it

',
    ),
    1 => 
    array (
      0 => '337',
      1 => '339',
    ),
    2 => 
    array (
      0 => 'https://www.youtube.com/watch?v=94q6fzbJUfg',
    ),
  ),
)

实际上,我在html中寻找的布局是:
1.影像
1.内容物
1.连结
1.影像
1.内容物
1.链接⋯

更新

我是这样合并数组的:

foreach ( $content as $idx => $val ) {
  $all_array[] = [ $val, $media[$idx], $yt[$idx] ];
}

以下是关联数组的外观:
内容:

array (
      0 => 
      array (
        0 => '
    brother
    
    ',
        1 => '
    Lorem
    
    ',
        2 => '
    End it
    
    ',
      ),
    )

媒体

array (
      0 => 
      array (
        0 => '337',
        1 => '339',
      ),
    )

Youtube视频

array (
      0 => 
      array (
        0 => 'https://www.youtube.com/watch?v=94q6fzbJUfg',
      ),
    )
gpnt7bae

gpnt7bae1#

我解决这个问题的方法是,首先计算每个数组中的tot. items,然后得到包含max items的数组,循环并按顺序添加元素:

//GET CUSTOM FIELDS
    $content = get_post_meta($post_to_edit->ID, 'content', false);
    $media = get_post_meta($post_to_edit->ID, 'media', false);
    $yt = get_post_meta($post_to_edit->ID, 'youtube', false);
    $max = max(count($content), count($media), count($yt));
    $combined = [];
//
// CREATE CUSTOM FIELDS UNIQUE ARRAY
for($i = 0; $i <= $max; $i++) {
    if(isset($media[$i])) {
        $combined[] = ["type" => "media", "value" => $media[$i]];
    }
    if(isset($content[$i])) {
        $combined[] = ["type" => "content", "value" => $content[$i]];
    }
    if(isset($yt[$i])) {
        $combined[] = ["type" => "youtube", "value" => $yt[$i]];
    } 
}

最后我可以循环:

foreach ($combined as $key => $val) {
   if($val['type'] === "media") {
     ...
   }
   if($val['type'] === "content") {
...
wlzqhblo

wlzqhblo2#

你不需要把数组合并在一起。它在单独的数组中工作得很好。但是,你的for循环没有正确的逻辑。尝试:

for ($i = 0; $i < count($media); $i++) {
    for ($j = 0; $j < count($media[$i]); $j++) {
        echo '<li>media->' . $media[$i][$j] . '</li>';
    }
    for ($j = 0; $j < count($content[$i]); $j++) {
        echo '<li>content->' . $content[$i][$j] . '</li>';
    }
    for ($j = 0; $j < count($youtube[$i]); $j++) {
        echo '<li>link->' . $youtube[$i][$j] . '</li>';
    }
}

相关问题