Lo siento por el título, pero no sé cómo explicarlo en Título. Entonces, aquí está mi caso.
yo tenia una mesa
| identificación | categoría | subcategoría |
|---|---|---|
| 1 | 1 | Manzana |
| 2 | 1 | Naranja |
| 3 | 2 | Coche |
| 4 | 2 | Motocicleta |
Lo que quiero hacer es hacer un bucle y la salida es así en PHP
<script type="text/javascript"> const subkategoris = { "1":[ {value:1,desc:"Apple"}, {value:2,desc:"Orange"}, ], "2":[ {value:3,desc:"Car"}, {value:4,desc:"Motorcycle"}, ], ...etc </script>Ya estoy tratando de hacer un bucle, pero lo que obtuve es así
<script type="text/javascript"> const subkategoris = { "1":[ {value:1,desc:"Apple"}, ], "1":[ {value:2,desc:"Orange"}, ], "2":[ {value:3,desc:"Car"}, ], "2":[ {value:4,desc:"Motorcycle"}, ...etc </script>¿Puede alguien ayudarme?
No está claro qué quiere lograr y en qué idioma. Estás pidiendo una solución PHP pero todo el código en JS.
Aquí hay una solución JS de lo que entiendo que estás tratando de hacer.
const initialData = [ { id: 1, category: 1, subCategory: 'Apple' },{ id: 2, category: 1, subCategory: 'Orange' },{ id: 3, category: 2, subCategory: 'Car' },{ id: 4, category: 2, subCategory: 'Motorcycle' }, ] const groupedByCategory = initialData.reduce((res, {id, category, subCategory}) => { const existing = res[category] || [] return { ...res, [category] : [...existing, {value: id, desc: subCategory}] } }, {}); console.log(groupedByCategory)Puedes hacer lo mismo en PHP usando array_reduce
$data = [...]; // array with the same payload of the js $result = array_reduce($data, function($res, $item){ $category = $item['category']; $existing = $res[$category] ?? []; $existing[] = ['value' => $item['id'], 'desc' => $item['subCategory']]; $res[$category] = $existing; return $res; }, []);Como parece obtener sus datos de una base de datos SQL con PHP, su solicitud puede hacer el trabajo sin necesidad de hacer un bucle con PHP o JS.
¿Puedes probar algo como esto?
$select = $conn->prepare( "SELECT DISTINCT category, id AS subkategoris_value, subcategory AS subkategoris_desc FROM sometable" ); $select->execute([]); $result = $select->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);Aquí, reemplace sometable con el nombre de su tabla y $conn con su conexión a MySQL DB.
Su salida será directamente como se esperaba.