PHP使用foreach多维数据

Ale*_*lex 0 php foreach codeigniter multidimensional-array

有这个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;
        // ................
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题,或者我做错了什么因为$['data']['car'][...]只返回url,title和img的1个项目,case "_cars": foreach...但在其中它确实返回所有数据.

编辑:但我想知道为什么在foreach ($searchResults['_cars']['items']...循环内部执行print_r($ data)会返回所有数据,foreach只有1?

swa*_*ins 5

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

$data['data']['car']['url'] = $url; // this is overwritten each time
Run Code Online (Sandbox Code Playgroud)

您需要创建一个迭代器并使用它:

$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++;
}
Run Code Online (Sandbox Code Playgroud)

  • @ w0rldart,这是因为你要覆盖`$ date ['data'] ['car'] ['XXX']`而不是添加另一个数组值.这就像设置`$ date_url = $ url;`每次迭代并期望`$ date_url`成为之后的数据数组.另外,`$ i`是为了确保每个数组的数组键是相同的(特别是如果这些变量在`foreach`中再次被覆盖).使用简单的实现,使用`[]`而不是`[$ i]`*会*工作,但**不推荐**. (2认同)