数组中的数组 Php Foreach
Array in Array Php Foreach
我在数组 foreach 中有数组。
我没有在 foreach 中添加 html 代码。只是为了展示一个例子。我已经工作了 2 个小时。请帮助我。
我的数组爆炸代码;
string = "Deri Renk|kırmızı-siyah-beyaz-sarı-lacivert,kadife Renk|kırmızı-sarı";
$delimiters = Array(",",":","|","-");
$res = multiexplode($delimiters,$string);
foreach ($res as $val) {
echo $val;
};
我的数组输出;
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => HEAD
)
[1] => Array
(
[0] => item1
[1] => item2
[2] => item3
[3] => item4
[4] => item5
)
)
)
[1] => Array
(
[0] => Array
(
[0] => Array
(
[0] => HEAD 2
)
[1] => Array
(
[0] => item1
[1] => item2
)
)
)
);
我要打印如下。这是一个简单的操作,但我无法做到,因为 php 是一些信息。 ;
<div>
<h1>HEAD</h1>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
</div>
<div>
<h1>HEAD</h1>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
</div>
我的多重爆炸函数是这样的:
function multiexplode ($delimiters,$string) {
$ary = explode($delimiters[0],$string);
array_shift($delimiters);
if($delimiters != NULL) {
foreach($ary as $key => $val) {
$ary[$key] = multiexplode($delimiters, $val);
}
}
return $ary;
}
我也没有包含 html,但添加了注释以指导您放置它的位置。
您需要循环数组的所有级别。
您的循环仅循环第一级并且那里没有值只有无法回显的数组。
foreach ($res as $sub) {
foreach($sub[0] as $key => $item){
// If key is 0 it's the head, else it's the items
if($key == 0){
echo " "; // this is HEAD
}
foreach($item as $val){
echo $val . "\n"; // this is ITEMS
}
}
};
看到它在这里工作:https://3v4l.org/sg4AR
如果你的数组是一致的:
$html = '';
foreach ($array as $value) {
$html .= '<div>';
$head = $value[0][0][0];
$html .= '<h1>'.$head.'</h1>';
$html .= '<ul>';
foreach ($value[0][1] as $item) {
$html .= '<li>'.$item.'</li>';
}
$html .= '</ul>';
$html .= '</div>';
}
我选择了重写它,以便更易于使用。这涉及删除对 multiexplode()
函数的需要,而是专门针对所涉及的字符串格式执行此操作。
所以首先按 ,
分解,然后将其拆分为 header 和内容。
$input = "Deri Renk|kırmızı-siyah-beyaz-sarı-lacivert,kadife Renk|kırmızı-sarı";
$list = explode(",", $input);
$list1 = [];
foreach( $list as $item ) {
list($key,$data) = explode("|", $item);
$list1[$key] = explode("-", $data);
}
foreach ( $list1 as $heading=>$out ) {
echo "<div><h1>$heading</h1><ul>";
echo "<li>".implode("</li><li>",$out)."</li>";
echo "</ul></div>";
}
输出是...
<div>
<h1>Deri Renk</h1>
<ul>
<li>kırmızı</li>
<li>siyah</li>
<li>beyaz</li>
<li>sarı</li>
<li>lacivert</li>
</ul>
</div>
<div>
<h1>kadife Renk</h1>
<ul>
<li>kırmızı</li>
<li>sarı</li>
</ul>
</div>
试试下面的代码;
$string = "HEAD|item1-item2-item3-item4-item5,HEAD 2|item1-item2";
$delimiters = array(",",":","|","-");
$res = multiexplode($delimiters,$string);
// Preparing HTML
$html = '';
foreach ($res as $val) {
$header = $val[0][0][0];
$items = $val[0][1];
$html .= '<div><h1>'.$header.'</h1><ul>';
foreach ($items as $item) {
$html .= '<li>'.$item.'</li>';
}
$html .= '</ul></div>';
};
echo $html;
我在数组 foreach 中有数组。
我没有在 foreach 中添加 html 代码。只是为了展示一个例子。我已经工作了 2 个小时。请帮助我。
我的数组爆炸代码;
string = "Deri Renk|kırmızı-siyah-beyaz-sarı-lacivert,kadife Renk|kırmızı-sarı";
$delimiters = Array(",",":","|","-");
$res = multiexplode($delimiters,$string);
foreach ($res as $val) {
echo $val;
};
我的数组输出;
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => HEAD
)
[1] => Array
(
[0] => item1
[1] => item2
[2] => item3
[3] => item4
[4] => item5
)
)
)
[1] => Array
(
[0] => Array
(
[0] => Array
(
[0] => HEAD 2
)
[1] => Array
(
[0] => item1
[1] => item2
)
)
)
);
我要打印如下。这是一个简单的操作,但我无法做到,因为 php 是一些信息。 ;
<div>
<h1>HEAD</h1>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
</div>
<div>
<h1>HEAD</h1>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
</div>
我的多重爆炸函数是这样的:
function multiexplode ($delimiters,$string) {
$ary = explode($delimiters[0],$string);
array_shift($delimiters);
if($delimiters != NULL) {
foreach($ary as $key => $val) {
$ary[$key] = multiexplode($delimiters, $val);
}
}
return $ary;
}
我也没有包含 html,但添加了注释以指导您放置它的位置。
您需要循环数组的所有级别。
您的循环仅循环第一级并且那里没有值只有无法回显的数组。
foreach ($res as $sub) {
foreach($sub[0] as $key => $item){
// If key is 0 it's the head, else it's the items
if($key == 0){
echo " "; // this is HEAD
}
foreach($item as $val){
echo $val . "\n"; // this is ITEMS
}
}
};
看到它在这里工作:https://3v4l.org/sg4AR
如果你的数组是一致的:
$html = '';
foreach ($array as $value) {
$html .= '<div>';
$head = $value[0][0][0];
$html .= '<h1>'.$head.'</h1>';
$html .= '<ul>';
foreach ($value[0][1] as $item) {
$html .= '<li>'.$item.'</li>';
}
$html .= '</ul>';
$html .= '</div>';
}
我选择了重写它,以便更易于使用。这涉及删除对 multiexplode()
函数的需要,而是专门针对所涉及的字符串格式执行此操作。
所以首先按 ,
分解,然后将其拆分为 header 和内容。
$input = "Deri Renk|kırmızı-siyah-beyaz-sarı-lacivert,kadife Renk|kırmızı-sarı";
$list = explode(",", $input);
$list1 = [];
foreach( $list as $item ) {
list($key,$data) = explode("|", $item);
$list1[$key] = explode("-", $data);
}
foreach ( $list1 as $heading=>$out ) {
echo "<div><h1>$heading</h1><ul>";
echo "<li>".implode("</li><li>",$out)."</li>";
echo "</ul></div>";
}
输出是...
<div>
<h1>Deri Renk</h1>
<ul>
<li>kırmızı</li>
<li>siyah</li>
<li>beyaz</li>
<li>sarı</li>
<li>lacivert</li>
</ul>
</div>
<div>
<h1>kadife Renk</h1>
<ul>
<li>kırmızı</li>
<li>sarı</li>
</ul>
</div>
试试下面的代码;
$string = "HEAD|item1-item2-item3-item4-item5,HEAD 2|item1-item2";
$delimiters = array(",",":","|","-");
$res = multiexplode($delimiters,$string);
// Preparing HTML
$html = '';
foreach ($res as $val) {
$header = $val[0][0][0];
$items = $val[0][1];
$html .= '<div><h1>'.$header.'</h1><ul>';
foreach ($items as $item) {
$html .= '<li>'.$item.'</li>';
}
$html .= '</ul></div>';
};
echo $html;