我有这个阵列:
Array
(
[0] => Array
(
[name] => System
[order] => 1
[icon] => stats.svg
[0] => Array
(
[title] => Multilingual
)
[1] => Array
(
[title] => Coloring
)
[2] => Array
(
[title] => Team work
)
[3] => Array
(
[title] => Tutorials
)
)
)
我想循环到这里以显示部分名称以及包含在以下数组中的所有功能。
所以,这就是我所做的:
foreach ($features as $feature => $info) {
echo '
'.$info['name'].'
<ul class="menu-vertical bullets">
';
foreach (array_values($info) as $i => $key) {
echo '
<li>'.$key['title'].'</li>
';
}
echo '
</ul>
';
}
除了前三分之一<li>
之外,我的第一个字符为name
,order
和icon
值。
你知道为什么吗?
感谢。
答案 0 :(得分:0)
在php中,array_values
表示数组的所有值。因此array_values($info)
是array($info['name'], $info['order'], $info['icon'], $info[0], $info[1], $info[2], $info[3])
在您的示例中,您可以跳过$info
的非整数键来获取标题:
<?php
$features = array();
$info = array();
$info['name'] = 'System';
$info['order'] = 1;
$info['icon'] = 'stats.svg';
$info[] = array('title'=>'Multilingual');
$info[] = array('title'=>'Coloring');
$features[] = $info;
foreach ($features as $feature => $info) {
echo $info['name'] . PHP_EOL;
echo '<ul class="menu-vertical bullets">' . PHP_EOL;
foreach ($info as $k => $item) {
if(!is_int($k)) continue;
echo '<li>' . $item['title'] . '</li>' . PHP_EOL;
}
echo '</ul>' . PHP_EOL;
}
但是,您的原始数据结构设计不合理且难以使用。为了更好的设计,您可以考虑以下代码,将项目移动到$info
的子数组:
<?php
$features = array();
$info = array();
$info['name'] = 'System';
$info['order'] = 1;
$info['icon'] = 'stats.svg';
$info['items'] = array();
$info['items'][] = array('title'=>'Multilingual');
$info['items'][] = array('title'=>'Coloring');
$features[] = $info;
foreach ($features as $feature => $info) {
echo $info['name'] . PHP_EOL;
echo '<ul class="menu-vertical bullets">' . PHP_EOL;
foreach ($info['items'] as $item) {
echo '<li>' . $item['title'] . '</li>' . PHP_EOL;
}
echo '</ul>' . PHP_EOL;
}
两个演示的示例输出:
System
<ul class="menu-vertical bullets">
<li>Multilingual</li>
<li>Coloring</li>
</ul>
除了第一个第三个
li
之外,它有效,我有名字,顺序和图标值的第一个字符。你知道为什么吗?
为什么你会看到'name','order','icon'值的第一个字符?让我们看看PHP是如何工作的。
以第一个循环为例:foreach (array_values($info) as $i => $key)
然后$i == 0, $key == 'System'
我们知道$key[0] == 'S', $key[1] == 'y', $key[2] == 's'
等等。
然后您尝试访问$key['title']
,但字符串'title'
无效作为字符串偏移量,因此它被PHP转换为整数:intval('title') == 0
。
然后$key['title'] == $key[intval('title')] == 'S'
这就是你所看到的。
答案 1 :(得分:0)
array_values返回数组的值,因此对于信息值,名称,顺序,图标,0,1,......
如果您只想要可以使用的打印标题,那么您的价值观是错误的:
foreach ($features as $feature => $info) {
echo '
'.$info['name'].'
<ul class="menu-vertical bullets">
';
//Remove some keys from info array
$removeKeys = array('name', 'order', 'icon');
$arr = $info;
foreach($removeKeys as $key) {
unset($arr[$key]);
}
foreach (array_values($arr) as $i => $key) {
echo '
<li>'.$key['title'].'</li>
';
}
echo '
</ul>
';
}
答案 2 :(得分:0)
array_value()
返回数组的值,在这里你将获得数组$ info的值,而我所理解的并不是你需要的。查看array_value()的详细信息。
您可以检查$ info的键是否为整数。如果是,请回复标题。试一试。
foreach ($features as $feature => $info) {
echo $info['name'].'<ul class="menu-vertical bullets">';
foreach ($info as $key => $value) {
if (is_int($key)) {
echo '<li>'.$key['title'].'</li>';
}
}
echo '</ul>';
}