PHP использует foreach многомерных данных вне его - PullRequest
0 голосов
/ 26 января 2012

Имея этот 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'][...] возвращает только 1 элемент для URL, заголовка и img за пределами case "_cars": foreach..., но внутри он возвращает все данные.

Edit: но мне интересно, почему выполнение print_r ($ data) внутри цикла foreach ($searchResults['_cars']['items']... возвращает все данные, а вне этого foreach only 1?

1 Ответ

5 голосов
/ 26 января 2012

Я не совсем уверен, что вы хотите, но на первый взгляд кажется, что каждая итерация перезаписывает фактическое значение ключа массива:

$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++;
}
...