在循环中向multidimensionnal数组添加元素

时间:2016-10-30 07:53:22

标签: php arrays

$arr1[] = "Bob Marley";
$arr1[] = "Album1";
$arr1[][] = Song1;


  0 => string 'Bob Marley' 
  1 => string 'Album1'
  2 => 
      0 => string 'Song1' 

我有上面的数组,想要在循环中添加一首新歌,我想要

      0 => string 'Bob Marley' 
      1 => string 'Album1'
      2 => 
          0 => string 'Song1' 
          1 => string 'Song2'

我有一个包含专辑的数组(attr:名字,艺术家和一系列歌曲),我的代码如下所示。

foreach ($AlbumsArray as $album) { 
        if(preg_match("#".$regexx."#i", $album->getArtist()) || preg_match("#".$regexx."#i", $album->getTitle())){
            $arrayAlbumFound[] = $album->getArtist();
            $arrayAlbumFound[] = $album->getTitle();
            $albumFound = true;
        }
        foreach ($album->getSongsArray() as $songs) {
            if(preg_match("#".$regexx."#i", $songs->getName())){
                if($albumFound){
                    $arrayAlbumFound[][count($arrayAlbumFound] = array($songs->getName()); 
                }
                else{ 
                    $arrayAlbumFound[] = $album->getArtist();
                    $arrayAlbumFound[] = $album->getTitle();
                    $arrayAlbumFound[count($arrayAlbumFound][] = $songs->getName(); 
                    $albumFound = true;
                }
            }
        }
        $albumFound = false;

3 个答案:

答案 0 :(得分:0)

简单的解决方案是:

$arr1[] = "Bob Marley";
$arr1[] = "Album1"
$arr1[] = array('Song1', 'Song2', 'Song3');

更复杂的是:

$arr1[] = "Bob Marley";    // element has index 0
$arr1[] = "Album1"         // element has index 1
// so next added element will have index `2`
$arr1[2][] = 'Song1';
$arr1[2][] = 'Song2';
$arr1[2][] = 'Song3';

答案 1 :(得分:0)

值必须是数组本身,或者您必须指定第一个维度的键并在第二个维度上使用新的element []运算符:

// with array value:
$arr1[] = "Bob Marley";
$arr1[] = "Album1";
$arr1[] = array("Song1");

// or with key:
$arr1[] = "Bob Marley";
$arr1[] = "Album1";
$arr1[2][] = "Song1'";

获取最高密钥:$arr1[count($arr1)][] = "Song1"

答案 2 :(得分:0)

使用单独的变量收集歌曲,并在存储找到的专辑艺术家和标题之前执行此操作,以便首先知道是否有匹配的歌曲:

foreach ($AlbumsArray as $album) { 
    $songsFound = [];
    foreach ($album->getSongsArray() as $songs) {
        if(preg_match("#".$regexx."#i", $songs->getName())){
            $songsFound[] = $songs->getName();
        }
    }
    if(count($songsFound) ||
            preg_match("#".$regexx."#i", $album->getArtist()) || 
            preg_match("#".$regexx."#i", $album->getTitle())){
        $arrayAlbumFound[] = $album->getArtist();
        $arrayAlbumFound[] = $album->getTitle();
        if (count($songsFound)) {
            $arrayAlbumFound[] = $songsFound;
        }
    }
}