Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建和推送到阵列_Php_Arrays - Fatal编程技术网

Php 创建和推送到阵列

Php 创建和推送到阵列,php,arrays,Php,Arrays,我试图创建一个数组(如果它还不存在),然后将值推送到它 foreach($playlist->items as $item) { $str = $item->snippet->title; $id = $item->snippet->resourceId->videoId; $substring = substr($str, 0, 5); $substring = strtolower($sub

我试图创建一个数组(如果它还不存在),然后将值推送到它

foreach($playlist->items as $item) {
        $str = $item->snippet->title;
        $id = $item->snippet->resourceId->videoId;

        $substring = substr($str, 0, 5);
        $substring = strtolower($substring);

            if (is_array($substring)) {
                array_push($substring, $id);
            }
            else {
                $substring = array();
                array_push($substring, $id);
            } 
        array_push($artists, $substring);
    }
我反复浏览从Youtube播放列表中检索到的数据,因此我使用foreach浏览每个项目,其中包含一个“标题”——艺术家和一个“id”——视频id。我将每个标题分为子字符串,并尝试使用它将艺术家分组到特定的数组中

如果该艺术家的数组已经存在,我会尝试将“id”推到该数组的末尾。如果数组不存在,我创建一个,然后将“id”推送到该数组上

最后,我尝试将每个艺术家阵列推入“艺术家”阵列

打印$artists数组时得到的结果如下

Array
(
[0] => Array
    (
        [0] => 1_YUrdjLyAU
    )

[1] => Array
    (
        [0] => Gp8lDW2LUM0
    )

...

[543] => Array
    (
        [0] => Exa0CzlCb3Y
    )
每个$id都在它自己的数组中,而它们应该根据$substring分组在一起。e、 g

Array
(
[0] => Array
    (
        [0] => 1_YUrdjLyAU
        [1] => 1_YUrdjLyAU
        [2] => 1_YUrdjLyAU
        [3] => 1_YUrdjLyAU
        [4] => 1_YUrdjLyAU
    )

[1] => Array
    (
        [0] => Gp8lDW2LUM0
        [1] => 1_YUrdjLyAU
        [2] => 1_YUrdjLyAU
        [3] => 1_YUrdjLyAU
    )

我不明白什么?

使用子字符串作为数组键并执行以下操作:

**Remove**
if (is_array($substring)) {
                array_push($substring, $id);
            }
            else {
                $substring = array();
                array_push($substring, $id);
            } 
        array_push($artists, $substring);

**Replace**
     $artist[$substring][]=$id;

以下是解决您的问题的简单方法:

$artists = array();

foreach($playlist->items as $item) {
    $artist = $item->snippet->artist; // however the artist name is fetched..
    $id = $item->snippet->resourceId->videoId;

    $artists[$artist][] = $id
}
这样,您不需要检查阵列中是否已经有艺术家,它将自动执行此操作并将视频id附加到艺术家。
$artists
数组将是关联的,我认为您不能用数字数组来实现它。
阵列将如下所示:

Array
(
['Jon Lajoie'] => Array
    (
        [0] => 1_YUrdjLyAU
        [1] => lf3hflkap39
        [2] => 1vt1455zzbe
        [3] => 6dthg3drgjb
        [4] => jfop3ifjf3p
    )

['Lonely Island'] => Array
    (
        [0] => Gp8lDW2LUM0
        [1] => 5he5hj67j7r
        [2] => krt7tkktzk8
        [3] => we54w4ggsrg
    )
)

我一发布这篇文章,就意识到了这一点。当我检查is_array($substring)时,我真的应该检查是否存在与$substring同名的数组,而不是$substring是一个数组的事实,实际上它是一个字符串..首先,您要使
$substring=strtolower($substring)和通过
$substring=[]丢失值之后为什么?对于每个项目,如果
$substring
不是数组,则将
$id
推到名为
$substring
的空白数组上,然后将该数组推到
$artists
数组上<如果你在上面运行
substr()
strtolower()
,除非我这里遗漏了什么,否则$substring
总是会是一个字符串。回答你的评论-不能是一个字符串和一个同名数组,如果你认为可能是这样的数组,为新字符串设置一个不同的名称需要将大量的$substring(这是一个字符串)替换为$artists[$substring],即使这样,它也不会神奇地工作,您还可以查看语法$arr[],它做同样的事情,但如果不存在数组,则创建数组。我使用了这种奇怪的子字符串方法,因为每个视频的标题都不容易提取出“艺术家标题”。比如说我有几首大卫·鲍伊的歌。他们的标题将是“大卫·鲍伊-赫托斯”,“大卫·鲍伊现场11/17/70”,“大卫·鲍伊官方音乐视频”等。因此,我希望我的子字符串将为所有三个标题拉出“大卫”,并能够将他们分组到理智的阵列中。就是这样!非常感谢,这就是我所需要做的,很简单