Array Php Foreach中的数组[复制]

问题描述 投票:-1回答:4

这个问题在这里已有答案:

我在阵列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>

我的multiexplode函数:

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;
}
php arrays foreach explode
4个回答
1
投票

我已经选择了重写它,以便使用起来更简单。这涉及消除对multiexplode()函数的需要,而是专门针对所涉及的字符串格式执行此操作。

所以首先按照,进行分解然后将其分解为标题和内容。

$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>

0
投票

我没有包含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


0
投票

如果您的数组是一致的:

$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>';
}

0
投票

试试以下代码;

$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;
© www.soinside.com 2019 - 2024. All rights reserved.