【问题标题】:How to merge 3 arrays keeping their meta key?如何合并 3 个数组以保持其元键?
【发布时间】:2022-11-12 10:18:19
【问题描述】:

我正在从一些 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. 图片
  2. 内容
  3. 链接
  4. 图片
  5. 内容
  6. 链接 ...

    更新

    这就是我合并数组的方式:

    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',
          ),
        )
    

【问题讨论】:

  • 请包括具有关联上下文的源数组的示例以及当前构建$all_array 的代码。需要有一些东西将每个数组中的记录相互关联,否则您可能需要使用自定义 wp_query 来包含关联。
  • 我的意思是更多来自 $content$media$yt 的 3 个源数组的数据,以便我们可以在答案中生成您的数据集示例。
  • 请显示您提供的数据所产生的确切预期结果。您描述的措辞不一致且难以理解。
  • 关联数组在哪里?您只构建/显示自动索引的多维数组
  • 我在这里看不到明确的minimal reproducible example。对于我来说,这是太多漫无边际的信息散布。

标签: php wordpress


【解决方案1】:

您不需要将数组合并在一起。它可以在单独的数组中正常工作。但是,您的 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>';
    }
}

【讨论】:

  • 如果计数从不改变,为什么每次迭代都使用count()?您没有使用foreach() 的任何原因?
  • 我使用了 count,因为我假设 $media[$i]、$content[$i] 和 $youtube[$i] 可以根据 $i 具有不同的长度。但是foreach 也可以。
  • @leighboz 这不起作用,首先我们只得到值的第一个字母,其次我们没有得到媒体>内容>链接,但我们重复它们media-&gt;3 media-&gt;3 content-&gt;&lt; content-&gt;p content-&gt;&gt; link-&gt;h
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
相关资源
最近更新 更多