اذهب إلى المحتوى

السؤال

نشر

لدي جدول المدن في قاعدة البيانات و أحتاج إلى إنشاء مصفوفة من النموذج التالي:

[
	['A'] => [
		18 => 'Alexandria',
		24 => 'Antioch',
		1679 => 'Akron',
		1875 => 'Atlanta',
		2713 => 'Abilene',	
	],
	['B'] => [
		28 => 'Bakersfield',
		154 => 'Billings',
		1495 => 'Bridgeport',
		2150 => 'Baltimore',
		4117 => 'Bend',	
	]
]

حاولت كتابة الكود بنفسي ، لكن اتضح أنه كبير. أنا متأكد من أن هناك حل أكثر إيجازًا.

$cities = City::pluck('title', 'id');

$letters = $cities->sort()->map(function($value) {
	return Str::limit($value, 1, '');
})->unique()->flatten();

$lettersArray = [];

foreach ($letters as $letter) {
	foreach($cities as $key => $city) {
		if ($letter == Str::limit($city, 1, '')) {
			$lettersArray[$letter][$key] = $city;
		}
	}
}

كيف يمكنني إعادة بنائه؟

وأحتاج أيضًا إلى فرز المدن حسب الاسم داخل المصفوفة.

Recommended Posts

  • 1
نشر

يُمكنك إعادة صياغة الكود بأحد الطرق التالية:

<?php

$cities = $cities
  ->sort()
  ->unique()
  ->groupBy(function (string $city): string {
    return strtolower(Str::limit(trim($city),1,''));
  }, true);

أو:

<?php

$result = City::pluck('title', 'id')
  ->sort()
  ->unique()
  ->groupBy(function (string $title): string {
    return strtolower($title[0]);
  });

// using php short closures

$result = City::pluck('title', 'id')
  ->sort()
  ->unique()
  ->groupBy(fn (string $title): string => strtolower($title[0]));

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...