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”,“大卫·鲍伊官方音乐视频”等。因此,我希望我的子字符串将为所有三个标题拉出“大卫”,并能够将他们分组到理智的阵列中。就是这样!非常感谢,这就是我所需要做的,很简单