2016-04-19 3 views
0

У меня есть переменная $result. Он имеет следующую структуру: enter image description hereОбъединить две последовательные итерации foreach в PHP?

Я пытаюсь получить массив структурированный, как это: masculine => 1, feminine => 2.

Я застрял здесь:

foreach ($result as $row) 
{ 
    foreach ($row as $column => $value) 
    { 
     echo $column . ' with order ' . $value . '<br/>'; 
    } 
} 

Выход моей попытки является:

enter image description here

Я попытался с помощью функции next() и применить его к $row variabile, но для каждой итерации Я получил 1(2) => false.

Я очень благодарен за вашу помощь!

ответ

2

Вы можете использовать PHP встроенная функция array_column, чтобы сделать эту работу.

array_column - возвращает значения из одного столбца в входном массиве

(PHP 5> = 5.5.0, PHP-7)

Синтаксис -

массив array_column (массив $ input, mixed $ column_key [, mixed $ index_key = null])

И скрипт будет как это -

<?php 

$result = array(
    array(
     'gender_value' => 'masculine', 
     'gender_preffered_order' => 1 
    ), 
    array(
     'gender_value' => 'feminine', 
     'gender_preffered_order' => 2 
    ), 
); 

$filtered = array_column($result, 'gender_preffered_order', 'gender_value'); 
print_r($filtered); 

Для получения дополнительной справки см ссылки - http://php.net/manual/en/function.array-column.php

Для PHP 5.5 <

<?php 

if (!function_exists('array_column')) { 
    function array_column($input, $column_key, $index_key = null) { 
     $arr = array_map(function($d) use ($column_key, $index_key) { 
      if (!isset($d[$column_key])) { 
       return null; 
      } 
      if ($index_key !== null) { 
       return array($d[$index_key] => $d[$column_key]); 
      } 
      return $d[$column_key]; 
     }, $input); 

     if ($index_key !== null) { 
      $tmp = array(); 
      foreach ($arr as $ar) { 
       $tmp[key($ar)] = current($ar); 
      } 
      $arr = $tmp; 
     } 
     return $arr; 
    } 
} 
?> 

Надеется, что это поможет !!

+0

+ один, потому что PHP имеет функцию буквально ВСЕ, lol – MonkeyZeus

+0

Работает как шарм. Я не могу поверить, что на самом деле есть встроенная функция для этого ... –

3

Это может работать:

$new_array = []; // Not sure if you needed this piece but I've included it :) 

foreach ($result as $row) 
{ 
    echo $row['gender_value'].' => '.$row['gender_preferred_order'].'<br>'; 

    $new_array[$row['gender_value']] = $row['gender_preferred_order']; 
} 

print_r($new_array); 

Я настоятельно рекомендую знакомясь с print_r()

+0

Спасибо, это работает отлично! –

1

Я надеюсь, что я понял ваш вопрос, но на основе результата вы хотели, я создал это:

$result = array(
    array(
     'gender_value' => 'masculine', 
     'gender_preferred_order' => 1, 
    ), 
    array(
     'gender_value' => 'feminine', 
     'gender_preferred_order' => 2, 
    ) 
); 

$set = array(); 

foreach($result as $gender) { 
    $set[] = array($gender["gender_value"] => $gender["gender_preferred_order"]); 
} 

var_dump($set); // [['masculine' => 1],['feminine' => 2]]