我正在尝试获取分配给数组元素的id值。我遇到的问题是它将通过foreach每70个循环分配一个id。我不太确定我在这个问题上做错了什么。
$search = 'echem';
$data = array();
$tags = null;
$i = 0;
//var_dump($this->videos);
foreach ($this->videos as $key => $value) {
foreach ($value as $key => $value) {
if ($key === 'id') {
$data[$i]['id'] = (int)$value;
}
if ($key == 'tags') {
$tags = explode(',', $value);
}
//echo $key . ' - ';
if (is_array($tags)) {
foreach ($tags as $key => $value) {
if (strtoupper($value) == strtoupper($search)) {
//echo 'Search Found <br/>';
$data[$i]['found'] = 1;
}
//echo $value.', ';
}
//echo '<br/>';
}
if (!isset($data[$i]['found'])) {
$data[$i]['found'] = 0;
}
$data[$i]['subId'] = $i;
$i++;
}
}
你可以看到我正在使用以下代码检查$ key是否在第8行是id:
if ($key === 'id') {
$data[$i]['id'] = (int)$value;
}
然后我运行循环的其余部分,似乎运行得很好并根据需要分配所有内容。密钥id是每个循环中的第一个键,所以为什么它不分配它让我难过。非常感谢任何帮助。
var_dump()的输出:
array (size=58086)
0 =>
array (size=3)
'id' => int 1
'found' => int 0
'subId' => int 0
1 =>
array (size=2)
'found' => int 0
'subId' => int 1
2 =>
array (size=2)
'found' => int 0
'subId' => int 2
3 =>
array (size=2)
'found' => int 0
'subId' => int 3
4 =>
array (size=2)
'found' => int 0
'subId' => int 4
5 =>
array (size=2)
'found' => int 1
'subId' => int 5
6 =>
array (size=2)
'found' => int 0
'subId' => int 6
7 =>
array (size=2)
'found' => int 0
'subId' => int 7
答案 0 :(得分:3)
我有点无聊,所以我重写了你的代码:
我已将as $key => $value
重命名为更明智的名字。
我删除了中间foreach
循环,因为简单的数组引用和isset()
就足够了。
在循环开始之前将strtoupper()
应用于$search
(避免多次执行此操作)。
结果:
$search = 'echem';
$data = array();
$i = 0;
$search = strtoupper($search);
foreach ($this->videos as $video) {
if (!isset($video['id'], $video['tags'])) {
continue; // skip records you can't use
}
// populate the `$data` entry
$data[$i]['id'] = $video['id'];
$data[$i]['tags'] = explode(',', $video['tags']);
// find a match in the tags
$data[$i]['found'] = 0;
foreach ($data[$i]['tags'] as $tag) {
if (strtoupper($tag) == $search) {
$data[$i]['found'] = 1;
}
}
$data[$i]['subId'] = $i;
$i++;
}