Как добавить, что массив оценивает середине ассоциативного массива?

Позволяет говорят, что у меня есть этот массив:

$array = array('a'=>1,'z'=>2,'d'=>4);

Позже в сценарии, я хочу добавить значение 'c'=>3 прежде 'z'. Как я могу сделать это?

Да, порядок важен. Когда я выполняю foreach () через массив, я НЕ хочу, это недавно увеличило стоимость добавленное в конец массива. Я получаю этот массив от mysql_fetch_assoc ()

Ключи, которые я использовал выше, являются заполнителями. Используя ksort () не достигнет того, что я хочу.

http://www.php.net/manual/en/function.array-splice.php#88896 выполняет то, что я ищу, но я ищу что-то более простое.

Возьмите демонстрационную таблицу базы данных приблизительно с 30 столбцами. Я получаю эти данные с помощью mysql_fetch_assoc (). В этом новом массиве, после столбца 'пицца' и 'напиток', я хочу добавить новый столбец 'full_dinner', который комбинирует значения 'пиццы' и 'напитка' так, чтобы, когда я выполняю foreach () на упомянутом массиве, 'full_dinner' прибыл непосредственно после 'напитка'

25
задан E_net4 says Reinstate 24 June 2019 в 07:43
поделиться

7 ответов

Попробуйте это

$array['c']=3;

Ассоциативный массив не заказывается по умолчанию, но если вы хотите сортировать их в алфавитном порядке, вы можете использовать ksort () , чтобы сортировать массив по этому ключу.

Если вы проверили статью PHP для Ksort () , вы будете у вас легко сортировать массив по ключу, например:

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
?>

// The above example will output:
a = orange
b = banana
c = apple
d = lemon
-121--1515974-

ассоциативные массивы не заказываются, поэтому вы можете просто добавить с $ Array ['C'] = 3 .

Если важен заказ, один вариант переключается на структуру данных, которые больше нравится:

$array = array(
   array('a' => 1),
   array('b' => 2)
   array('d' => 4)
);

, используйте Array_SPlice ($ Array, 2, 0, массив ('C' => 3)) Чтобы вставить в положение 2. См. Руководство по Array_SPlice .

0
ответ дан 28 November 2019 в 18:25
поделиться

Альтернативный подход - дополнить ассоциативную структуру массива с упорядоченным индексом, который определяет итерационный порядок ключей. Например:

$index = array('a','b','d');

// Add new value and update index
$array['c'] = 3;
array_splice($index, 2, 0, 'c');

// Iterate the array in order
foreach $index as $key {
   $value = $array[$key];
}
0
ответ дан 28 November 2019 в 18:25
поделиться

Вы можете добавить его, делая

$array['c']=3;

, и если вы абсолютно хотите, чтобы он отсортировал для целей печати, вы можете использовать функцию PHP Ksort ($ Array)

, если клавиши Не сортируется по Ksort, вам придется создать свой собственный сортировку, используя функцию Uasort PHP. Смотрите примеры здесь

http://php.net/manual/en/function.uasort.php

-1
ответ дан 28 November 2019 в 18:25
поделиться
function insertValue($oldArray, $newKey, $newValue, $followingKey) {

    $newArray = array ();
    foreach (array_keys($oldArray) as $k) {
        if ($k == $followingKey)
            $newArray[$newKey] = $newValue;
        $newArray[$k] = $oldArray [$k];
    }

    return $newArray;
}

Вы называете это

insertValue($array, 'c', '3', 'z')

Что касается редактирования 5:

редактируйте свой sql так, чтобы он читал

SELECT ..., pizza, drink, pizza+drink as full_meal, ... FROM ....

, и колонка автоматически:

Array (
  ...
  'pizza' => 12,
  'drink' => 5,
  'full_meal' => 17,
  ...
)
5
ответ дан 28 November 2019 в 18:25
поделиться

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

<pre>
<?php

$array = array('a'=>1,'z'=>2,'d'=>4);

$array['c'] = 3;

print_r( $array );

uksort( $array, 'sorter' );

print_r( $array );

function sorter( $a, $b )
{
    static $ordinality = array(
        'a' => 1
      , 'c' => 2
      , 'z' => 3
      , 'd' => 4
    );
    return $ordinality[$a] - $ordinality[$b];
}

?>
</pre>

Вот подход, основанный на ArrayObject, использующий ту же самую концепцию

$array = new CitizenArray( array('a'=>1,'z'=>2,'d'=>4) );
$array['c'] = 3;

foreach ( $array as $key => $value )
{
    echo "$key: $value <br>";
}

class CitizenArray extends ArrayObject
{
    static protected $ordinality = array(
        'a' => 1
      , 'c' => 2
      , 'z' => 3
      , 'd' => 4
    );

    function offsetSet( $key, $value )
    {
        parent::offsetSet( $key, $value );
        $this->uksort( array( $this, 'sorter' ) );
    }

    function sorter( $a, $b )
    {
        return self::$ordinality[$a] - self::$ordinality[$b];
    }
}
0
ответ дан 28 November 2019 в 18:25
поделиться

Попробуйте это

$array['c']=3;

По умолчанию ассоциативный массив не упорядочен, но если вы хотите отсортировать их по алфавиту, вы можете использовать ksort () для сортировки массив по ключу.

Если вы посмотрите статью PHP для ksort () , вы увидите, что легко отсортировать массив по ключу, например:

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
foreach ($fruits as $key => $val) {
    echo "$key = $val\n";
}
?>

// The above example will output:
a = orange
b = banana
c = apple
d = lemon
-1
ответ дан 28 November 2019 в 18:25
поделиться

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

function InsertBeforeKey( $originalArray, $originalKey, $insertKey, $insertValue ) {

    $newArray = array();
    $inserted = false;

    foreach( $originalArray as $key => $value ) {

        if( !$inserted && $key === $originalKey ) {
            $newArray[ $insertKey ] = $insertValue;
            $inserted = true;
        }

        $newArray[ $key ] = $value;

    }

    return $newArray;

}

Затем просто вызовите

$array = InsertBeforeKey( $array, 'd', 'c', 3 );
14
ответ дан 28 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: