-2

CATEGORYインデックスで手動ではなく、一意の要素ごとに要素を取得できるように、要素のインデックスで整列された配列を並べ替えたいと思います。

前提条件

$products = array(
    'CATEGORY' =>
    array(
        0 => 'book',
        1 => 'book',
        2 => 'desk',
    ),
    /* FYI: Other keys have been removed for conciseness */
    'DESCRIPTION' => 
    array(
        0 => 'Bar',
        1 => 'sdfadasfdasfas',
        2 => 'Barrrr',
    ),
);

事後条件

$products = array(
    'CATEGORY' =>
    array(
        'book' =>
        array(
            0 =>
            array(
                'DESCRIPTION' => 'Bar',
            ),
            1 =>
            array(
                'DESCRIPTION' => 'sdfadasfdasfas',
            ),
        ),
        'desk' =>
        array(
            0 =>
            array(
                'DESCRIPTION' => 'Barrrr',
            ),
        ),
    ),
)

試み

$cat_to_index = '';

foreach (array_values(array_unique($products['CATEGORY'])) as $category => $uniq_cat) {
    for($i=array_search($uniq_cat, $products['CATEGORY']);
        $i!==FALSE; $i=array_search($uniq_cat, $products['CATEGORY']))
            $cat_to_index .= $i; // just for debugging
}

コードパッドでの実行を参照してください

エラー

メモリ不足(無限ループ)。O(n)できれば、この問題の解決策を探してください。

4

2 に答える 2

1
<?php
$products = array(
    'CATEGORY' =>
    array(
        0 => 'book',
        1 => 'book',
        2 => 'desk',
    ),
    /* FYI: Other keys have been removed for conciseness */
    'DESCRIPTION' => 
    array(
        0 => 'Bar',
        1 => 'sdfadasfdasfas',
        2 => 'Barrrr',
    ),
);

$newProducts = array();
$newProducts['CATEGORY'] = array();
foreach ($products['CATEGORY'] as $id =>$cat) {
    $newProducts['CATEGORY'][$cat] []= array('DESCRIPTION' => $products['DESCRIPTION'][$id]);
}

var_dump($newProducts);
于 2012-11-06T14:26:47.987 に答える
0

たぶん、array_keys関数は$search_valueパラメータを助けることができます。私はこれがあなたが望むものであることを願っています:

<?php
$catalogue_html = '';

// $unique_cats just contains the unique category names

foreach ($uniq_cats as $category => $uniq_cat) {
    // Using the SEARCH param of the "array_key" function
    $keys = array_keys( $products['CATEGORY'] , $uni_cat );

    if ( 0 < count( $keys ) ) {
        // Occur more than once
        $catalogue_html .= join(", ", $keys) . "\n";
    }
}

echo $catalogue_html;
?>
于 2012-11-06T10:30:58.800 に答える