【问题标题】:Foreach multidimensional array using the key - PHP使用键的 foreach 多维数组 - PHP
【发布时间】:2014-07-21 03:08:06
【问题描述】:

我发布此消息是因为我无法在任何地方找到问题的答案。我可能不是在寻找正确的搜索查询,我只是从数组开始。

我有以下数组,其中包含按信息类型(名称、URL、日期、在线)组织的嵌套数组:

Array (
[Name] => Array ( [0] => Name 1 [1] => Name 2 )
[URL] => Array ( [0] => http://url-1.com [1] => http://url-2.com )
[Date] => Array ( [0] => 2014-05-31 11:10 [1] => 2014-05-26 11:16 )
[Online] => Array ( [0] => 1 [1] => ) )

关键是显示哪些项目是链接的。例如,每个 [0] 属于一起:

  • [URL][0] 是 [Name][0] 的 url

我想做一个 foreach 按键显示值,以便回显如下内容:

<a href="[URL][0]">[Name][0]</a><p>[Date][0]</p><p>[Online][0]</p>
<a href="[URL][1]">[Name][1]</a><p>[Date][1]</p><p>[Online][1]</p>

可以有 1 到 n 个键。

找到解决方案

我设法得到不同的数组:

$array = Array (
[0] => Array ( [name] => Name 1 [url] => http://url-1.com [date] => 2014-05-31 11:10 [online] => 1 )
[1] => Array ( [name] => Name 2 [url] => http://url-2.com [date] => 2014-05-26 11:16 [online] => ) ) 

它是由包含在一起的值的数组组织的,而不是由包含一起包含所有名称的数组,一起包含所有 url,... 如果有人知道如何将首字母更改为这个,我可以将其添加到我的解决方案中。

有了这个新阵列后,管理起来就容易多了。我让循环与 for 一起工作:

我首先通过获取最高的数组键值来设置 for 的限制:

$max_stop = max(array_keys($array));

然后我做了一个。 $max_stop 后面的 +1 是必需的,否则它会在倒数第二个停止计数(计数从 0 开始而不是 1)

for ($row = 0; $row < $max_stop+1; $row++){

然后我回显我想要显示的内容:

echo '<a href="'.$array[$row]["url"].'">'.$array[$row]["name"].'</a><p>'.$array[$row]["date"].'</p><p>'.$array[$row]["online"].'</p>';}

这可能不是最好的方法,但它可以按我的意愿工作。

【问题讨论】:

  • 你为什么不翻转数组呢?
  • 好主意,我会调查的。一旦它被按键组织起来,让它像我想要的那样工作肯定会更容易。谢谢你的回答

标签: php foreach


【解决方案1】:

你可以这样做:

$array = array(
    'Name' => array( 0 => "name 1", 1 => "name 2"),
    'URL' => array( 0 => "http://www.example.com", 1 => "http://www.stackoverflow.com"),
    'Date' => array( 0 => "2014-05-31 11:10", 1 => "2014-05-02 12:10"),
    'Online' => array( 0 => 1, 1 => )
);

foreach($array['Name'] as $k => $v) {

    $url = isset($array['URL'][$k])?$array['URL'][$k]:"";
    $date = isset($array['Date'][$k])?$array['Date'][$k]:"";
    $online = isset($array['Online'][$k])?$array['Online'][$k]:"";

    echo "<a href='$url'>$v</a><p>$date</p><p>$online</p>";
}

输出是:

<a href='http://www.example.com'>name 1</a><p>2014-05-31 11:10</p><p>1</p>
<a href='http://www.stackoverflow.com'>name 2</a><p>2014-05-02 12:10</p><p>0</p>

但最好像 Barmar 所说的那样翻转数组。

【讨论】:

  • 谢谢,我会试试的,但我想我会尝试翻转它。每个人似乎都同意这是最好的方法。
  • 我刚刚对其进行了测试,按原样复制粘贴,仅显示名称值。输出如下:codeName 1

    Name 2

    code
  • 好像是$array['URL'][$k]没有设置! URL 真的是数组的索引吗(区分大小写)?请先发送print_r($array) 并发布结果。
  • 区分大小写。我已将所有内容都小写以检查(名称变为名称,URL 变为 url,...),但它也不起作用。这是打印出来的数组:codeArray ([name] => Array ([0] => Name 1 [1] => Name 2) [url] => Array ([0] => url-1.com [1] => url-2.com ) [日期] => 数组 ( [0] => 2014-05-31 11:10 [1] => 2014-05-26 11:16 ) [在线] => 数组 ( [0] => 1 [1] => )code 现在都是小写了,不过我也把你的代码改成了小写。
  • 我找到了一个稍微不同的数组的解决方案。我将解决方案添加到我的问题中。感谢您的帮助@史蒂文
【解决方案2】:
<?php
$array = array(
         'name' => array('name1','name2');
         'url' => array('url1','url2');
         'date' => array('date1','date2');
         'online' => array('online1','online2');
      );

for($i=0; $i<sizeof($array['name']); $i++)
{
?>

   <a href="".$array['url'][$i]."">".$array['name'][$i]."</a><p>".$array['date'][$i]."</p><p>".$array['online'][$i]."</p> 

<?php
}
?>

【讨论】:

【解决方案3】:

将数组按不同的顺序排列可能会更容易:

//Setup your array   
$array =  array(
    array('Name' => 1, 'URL' => 'http://url-1.com', 'Date' => '2014-05-31 11:10', 'Online' => 1),
    array('Name' => 5, 'URL' => 'http://url-2.com', 'Date' => '2014-05-20 11:10', 'Online' => 0)
);


//Loop the array 
foreach($array as $item){
    echo '<a href="'.$item['URL'].'">'.$item['Name'].'</a><p>'.$item['Date'].'</p><p>'.$item['Online'].'</p>';
}

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2015-08-13
    • 2012-05-01
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多