Сделать 1d Array из 1-го члена каждого значения в 2d Array | PHP - PullRequest
0 голосов
/ 04 августа 2009

Как вы можете это сделать? Мой код, показанный здесь, не работает

for($i=0;i<count($cond);$i++){
    $cond[$i] = $cond[$i][0];
}

Ответы [ 5 ]

3 голосов
/ 04 августа 2009

Это может быть так просто:

$array = array_map('reset', $array);
1 голос
/ 04 августа 2009

Как уже говорилось, ваш код не будет работать должным образом в различных ситуациях. Попробуйте инициализировать ваш массив следующими значениями:

$cond = array(5=>array('4','3'),9=>array('3','4'));

Решение, для меня лучше читаемое также следующий код:

//explain what to do to every single line of the 2d array
function reduceRowToFirstItem($x) { return $x[0]; }

// apply the trasnformation to the array
$a=array_map('reduceRowTofirstItem',$cond);

Вы можете прочитать справку для карты массива для подробного объяснения.

Вы также можете выбрать небольшое отклонение, используя array_walk (он работает с массивом "на месте"). Обратите внимание, что функция не возвращает значение и что его параметр передается по ссылке.

function reduceToFirstItem(&$x) { $x=$x[0]; }
array_walk($cond, 'reduceToFirstItem');
1 голос
/ 04 августа 2009

Могут возникнуть проблемы, если исходный массив не имеет числового индекса. Попробуйте вместо этого:

$destinationArray = array();
for ($sourceArray as $key=>$value) {
    $destinationArray[] = $value[0]; //you may want to use a different index than '0'
}
1 голос
/ 04 августа 2009
// Make sure you have your first array initialised here!
$array2 = array();
foreach ($array AS $item)
{
    $array2[] = $item[0];
}

Предполагая, что впоследствии вы захотите иметь то же имя переменной, вы можете переназначить новый массив обратно старому.

$array = $array2;
unset($array2); // Not needed, but helps with keeping memory down

Кроме того, вы можете, в зависимости от того, что находится в массиве, делать что-то вроде.

$array = array_merge(array_values($array));
0 голосов
/ 04 августа 2009

Это должно работать. Почему это не работает? какое сообщение об ошибке вы получаете? Вот код, который я бы использовал:

$inArr;//This is the 2D array
$outArr = array();
for($i=0;$i<count($inArr);$i++){
        $outArr[$i] = $inArr[$i][0];
}
...