Как заставить элемент быть в форме массива (в php) - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть код, который перебирает массив элементов, которые сами являются массивами.Код прекрасно работает для 2 или более таких элементов.Однако он НЕ работает для ОДНОГО массива "элемент" (потому что он начинает перебирать каждый из его подэлементов).

мой код:

  foreach($list as $element)
  ...

большую часть времени, $список выглядит так:

Array
(
    [0] => Array
        (
            [a] => 'abc'
            [b] => 'bcd'
        )

    [1] => Array
        (
            [a] => 'abc'
            [b] => 'bcd'
        )
)

все работает нормально, но если $ list:

 Array
 (
    [a] => 'abc'
    [b] => 'bcd'
  )

, очевидно, мой код теперь облажался, так как foreach будет перебирать 'a' и 'b'.

Я хочу преобразовать:

 Array
 (
    [a] => 'abc'
    [b] => 'bcd'
  )

в:

Array
(
    [0] => Array
        (
            [a] => 'abc'
            [b] => 'bcd'
        )
 )

наиболее эффективным способом!

Ответы [ 5 ]

1 голос
/ 13 апреля 2011

Используйте is_array() (связанный) , чтобы определить, является ли переданный элемент массивом или нет. Затем вы можете справиться с этим соответствующим образом.

foreach($somethingarray['something'] as $something) {
    if(is_array($something)) {
        // do something with array
    } else {
        // do something with non array
    }
}

Запустите это на http://www.phplint.com/, чтобы увидеть результат, обращающийся к вашим комментариям @Frank D.

<code>echo '<pre>';
$var = array( 'my_var' => array( 'my_value' ) );
var_dump( $var );
$var2 = array( $var );
var_dump( $var2 );
echo '
';
0 голосов
/ 18 сентября 2011

Закончилась проверка отдельного элемента, если на нижнем уровне существовал конкретный элемент (известный как существующий только в массиве массивов), то сделал что-то вроде:

 $list = Array 
  ( 
    [0] => $list
  ) ;
0 голосов
/ 14 апреля 2011

будьте осторожны, как вставить свой первый элемент
никогда не позволяйте $ list быть

Array
(
   [a] => 'abc'
   [b] => 'bcd'
)

так

//create your first element as
$firstElement=array('a'=>'abc','b'=>'bcd');
$list[] = $firstElement;                 
// or in one sentence:  $list[] = array('a'=>'abc', 'b'=>'bcd');
// call your function here for one elment array
yourFunc($list)

// and so on the same way (how did you made the two elements $list array?)
$secondElement = array('a'=>'abc', 'b'=>'bcd');
$list[] = $secondElement;
// call your function here for two elments array
yourFunc($list)
0 голосов
/ 13 апреля 2011

Как вы знаете, foreach будет перебирать каждый элемент массива. Если массив пуст, он ничего не сделает. Таким образом, вы можете просто сделать $ var = array (); установить пустой массив.

Лучшим решением является проверка перед выполнением ваших операторов foreach, является ли ввод массивом, используя in_array ().

0 голосов
/ 13 апреля 2011

Используйте (массив), чтобы заставить вашу переменную быть массивом так:

foreach ((array)$somethingarray['something'] as $something) { /* $something is first array's element... And the only if you casted your "not-array" into an array by (array) */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...