Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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使用外部的foreach多维数据_Php_Codeigniter_Multidimensional Array_Foreach - Fatal编程技术网

PHP使用外部的foreach多维数据

PHP使用外部的foreach多维数据,php,codeigniter,multidimensional-array,foreach,Php,Codeigniter,Multidimensional Array,Foreach,使用以下php代码: $data['items'] = array('cars', 'bikes', 'trains'); $data['title'] = $parameters['title']; foreach ($searchResults as $key => $value) { switch ($key) { case "_cars": foreach ($searchResults['_cars']['items'] a

使用以下php代码:

$data['items'] =  array('cars', 'bikes', 'trains');
$data['title']   = $parameters['title'];

foreach ($searchResults as $key => $value)
{
    switch ($key)
    {
        case "_cars":
        foreach ($searchResults['_cars']['items'] as $car)
        {
            preg_match('@video/([^_]+)_([^/]+)@', $car['url'], $match);
            $url = $match[1].'/'.$match[2];
            $url = base_url().'video/'.substr($url,0,1).'d'.substr($url,1);

            $data['data']['car']['url']   = $url;
            $data['data']['car']['title'] = $car['title'];
            $data['data']['car']['img']   = $car['thumbnail_medium_url'];
        }
        break;
        // ................
我如何解决这个问题,或者我做错了什么,因为
$['data']['car'][…]
只返回url、title和img的一个项目,在
case“\u cars”:foreach…
之外,但在它内部返回所有数据

编辑:
但是我想知道为什么在
foreach($searchResults[''cars']['items'].
循环中打印r($data)会返回所有数据,而在
foreach
循环之外只返回1?

我不太确定您想要什么,但乍一看,似乎每次迭代都在覆盖数组键的实际值:

$data['data']['car']['url'] = $url; // this is overwritten each time
您需要创建一个迭代器并使用它:

$i = 0;
foreach ($searchResults['_cars']['items'] as $car)
{
  preg_match('@video/([^_]+)_([^/]+)@', $car['url'], $match);
  $url = $match[1].'/'.$match[2];
  $url = base_url().'video/'.substr($url,0,1).'d'.substr($url,1);

  $data['data']['car'][$i]['url']   = $url;
  $data['data']['car'][$i]['title'] = $car['title'];
  $data['data']['car'][$i]['img']   = $car['thumbnail_medium_url'];
  $i++;
}

我不太确定您想要什么,但乍一看,似乎每次迭代都会覆盖数组键的实际值:

$data['data']['car']['url'] = $url; // this is overwritten each time
您需要创建一个迭代器并使用它:

$i = 0;
foreach ($searchResults['_cars']['items'] as $car)
{
  preg_match('@video/([^_]+)_([^/]+)@', $car['url'], $match);
  $url = $match[1].'/'.$match[2];
  $url = base_url().'video/'.substr($url,0,1).'d'.substr($url,1);

  $data['data']['car'][$i]['url']   = $url;
  $data['data']['car'][$i]['title'] = $car['title'];
  $data['data']['car'][$i]['img']   = $car['thumbnail_medium_url'];
  $i++;
}

它只返回1项,因为您在foreach循环中覆盖了
$data
。这不是因为…我这样做是因为它在codeigniter中。它只返回1项,因为您在foreach循环中覆盖了
$data
。这不是因为…我这样做是因为它在codeigniter中,但没有任何方法可以使用它g
$i
?但我想知道为什么在
foreach($searchResults[''cars']['items'])中打印($data)
。循环返回所有数据,并且只在1之外?@w0rldart,这是因为您正在覆盖
$date['data']['car'['XXX']
而不是添加另一个数组值。这就像在每次迭代中设置
$date\u url=$url;
并期望
$date\u url
之后是一个数据数组。此外,
$i
还确保每个数组键相同(特别是在
foreach
中再次覆盖这些变量时)。在您的简单实现中,使用
[]
而不是
[$i]
是可行的,但不建议这样做。为了接受答案,我们不得不花上几分钟:)但是没有
$i
就不能使用它吗?但是我想知道为什么要在
foreach($searchResults[''u cars')中使用
打印r($data)
['items']…
loop返回所有数据,并且只在1之外?@w0rldart,这是因为您正在覆盖
$date['data']['car']['XXX']
而不是添加另一个数组值。这就像在每次迭代中设置
$date\u url=$url;
并期望
$date\u url
之后是一个数据数组。此外,
$i
还确保每个数组键相同(特别是在
foreach
中再次覆盖这些变量时)。对于您的简单实现,使用
[]
而不是
[$i]
将可行,但不建议这样做。必须等待几分钟才能接受答案:)